我在.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];
感谢您指点我正确的方向。
答案 0 :(得分:1)
视图控制器仅用于在屏幕上显示时。它们不是存储数据的地方。通常当一个视图控制器直接与另一个没有创建的视图控制器对话时,你就会做错事。
将SPOCTrackList
移至您的模型,让两个视图控制器与之对话,而不是彼此对话。
永远不应该有" sharedInstance"在视图控制器上。这肯定表明您正在滥用视图控制器作为模型。
在您的特定情况下可能发生的事情是viewDidLoad
的运行速度与SPOCVC
完全不同sharedInstance
。
答案 1 :(得分:-1)
为什么不使用appdelegate来处理这个
appdelegate.h
//添加属性以保存引用
@property (nonatomic, copy) NSMutableArray *referenceArray;
//分享app delegate
+(AppDelegate *)sharedAppDelegate;
@end
//合成属性
@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];