addObject 到 NSMutableArray 即使在初始化之后也是 nil?

addObject to NSMutableArray is nil even after initialization?

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

@property (strong, nonatomic) NSMutableArray* SPOCTrackList;

在 viewDidLoad 中

if ([self SPOCTrackList] == nil) {
    self.SPOCTrackList = [[NSMutableArray alloc]init];
    NSLog(@"SPOTTrackList INITIALIZED");
}

在单独的 VC 中,我正在尝试 pass/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];

感谢您为我指明了正确的方向。

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

SPOCTrackList 移动到您的模型并让两个视图控制器与其对话而不是彼此对话。

视图控制器上不应该有 "sharedInstance"。这是您滥用视图控制器作为模型的明确标志。

在您的特定情况下可能发生的情况是 viewDidLoad 与您的 sharedInstance.

在完全不同的 SPOCVC 上 运行

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

appdelegate.h

//添加属性来保存引用

@property (nonatomic, copy) NSMutableArray *referenceArray;

//分享应用委托

+(AppDelegate *)sharedAppDelegate;
@end

在appdelegate.m

//合成属性

@synthesize referenceArray;

//return实际代表

+(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];