初始化后,对于NSMutableArray的addObject是否为零?

时间:2015-01-30 00:01:37

标签: ios objective-c nsmutablearray

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

@property (strong, nonatomic) NSMutableArray* SPOCTrackList;

在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已初始化,我可以添加虚拟对象,但为什么我不能使用单例或任何东西从另一个VC传递它,例如......

SPOCVC* spocVC = self.tabBarController.viewControllers[2];
[spocVC.SPOCTrackList addObject:selectedTrack];

感谢您指点我正确的方向。

2 个答案:

答案 0 :(得分:1)

视图控制器仅用于在屏幕上显示时。它们不是存储数据的地方。通常当一个视图控制器直接与另一个没有创建的视图控制器对话时,你就会做错事。

SPOCTrackList移至您的模型,让两个视图控制器与之对话,而不是彼此对话。

永远不应该有" sharedInstance"在视图控制器上。这肯定表明您正在滥用视图控制器作为模型。

在您的特定情况下可能发生的事情是viewDidLoad的运行速度与SPOCVC完全不同sharedInstance

答案 1 :(得分:-1)

为什么不使用appdelegate来处理这个

appdelegate.h

//添加属性以保存引用

@property (nonatomic, copy) NSMutableArray *referenceArray;

//分享app delegate

+(AppDelegate *)sharedAppDelegate;
@end
在appdelegate.m

//合成属性

@synthesize referenceArray;

//返回实际的委托

+(AppDelegate *)sharedAppDelegate {return (AppDelegate *)[UIApplication sharedApplication].delegate;}
在viewdidload方法中

//添加委托

import "appdelegate.h"

//初始化数组

self.SPOCTrackList = [[NSMutableArray alloc]init];

//添加参考

[AppDelegate sharedAppDelegate].referenceArray = self.SPOCTrackList;

并添加像这样的

import "appdelegate.h"

[[AppDelegate sharedAppDelegate].referenceArray addobject:object];