Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 即使在初始化之后,NSMutableArray的addObject是否为零?_Ios_Objective C_Nsmutablearray - Fatal编程技术网

Ios 即使在初始化之后,NSMutableArray的addObject是否为零?

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

我有一个NSMutableArray在.h中声明为属性,并在SPOCVC.m(UIViewController)中的viewDidLoad中初始化

在viewDidLoad中

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: