Ios 即使在初始化之后,NSMutableArray的addObject是否为零?
我有一个NSMutableArray在.h中声明为属性,并在SPOCVC.m(UIViewController)中的viewDidLoad中初始化 在viewDidLoad中Ios 即使在初始化之后,NSMutableArray的addObject是否为零?,ios,objective-c,nsmutablearray,Ios,Objective C,Nsmutablearray,我有一个NSMutableArray在.h中声明为属性,并在SPOCVC.m(UIViewController)中的viewDidLoad中初始化 在viewDidLoad中 if ([self SPOCTrackList] == nil) { self.SPOCTrackList = [[NSMutableArray alloc]init]; NSLog(@"SPOTTrackList INITIALIZED"); } 在另一个VC中,我试图将/addObject传递给SPO
if ([self SPOCTrackList] == nil) {
self.SPOCTrackList = [[NSMutableArray alloc]init];
NSLog(@"SPOTTrackList INITIALIZED");
}
在另一个VC中,我试图将/addObject传递给SPOCTracklist
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
SCTrack* selectedTrack = self.trackList[indexPath.row];
[[[SPOCVC sharedInstance]SPOCTrackList]addObject:selectedTrack];
NSLog(@"%lu", (unsigned long)[[[SPOCVC sharedInstance]SPOCTrackList]count]);
所以我的NSMutableArray已经初始化,我可以添加虚拟对象,但是为什么我不能使用singleton或任何东西从另一个VC传递它,比如
SPOCVC* spocVC = self.tabBarController.viewControllers[2];
[spocVC.SPOCTrackList addObject:selectedTrack];
谢谢你给我指明了正确的方向 视图控制器仅在屏幕上时可用。它们不是存储数据的地方。通常,当一个视图控制器直接与它未创建的另一个视图控制器对话时,您是做错了什么 将
SPOCTrackList
移动到您的模型中,让两个视图控制器与其对话,而不是彼此对话
视图控制器上不应存在“sharedInstance”。这肯定表明您正在滥用视图控制器作为模型
在您的特定情况下可能发生的情况是,
viewDidLoad
运行在与您的sharedInstance
完全不同的SPOCVC
上,为什么不使用appdelegate来处理此问题
appdelegate.h
//添加属性以保存引用
@property (nonatomic, copy) NSMutableArray *referenceArray;
[AppDelegate sharedAppDelegate].referenceArray = self.SPOCTrackList;
//共享应用程序代理
+(AppDelegate *)sharedAppDelegate;
@end
在appdelegate.m中
//综合性质
@synthesize referenceArray;
//返回实际的委托
+(AppDelegate *)sharedAppDelegate {return (AppDelegate *)[UIApplication sharedApplication].delegate;}
在viewdidload方法中
//添加代理
import "appdelegate.h"
//初始化数组
self.SPOCTrackList = [[NSMutableArray alloc]init];
//添加引用
@property (nonatomic, copy) NSMutableArray *referenceArray;
[AppDelegate sharedAppDelegate].referenceArray = self.SPOCTrackList;
再加上任何类似的地方
import "appdelegate.h"
[[AppDelegate sharedAppDelegate].referenceArray addobject:object];
不要在
viewDidLoad
中初始化SPOCTrackList
,而是使用相应的init…
方法进行初始化。谢谢!我是iOS开发者的新手。你至少要研究一下苹果的“可可核心竞争力”。这种特殊的模式称为MVC: