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];
我有一个 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];