我难住了。 NSLog 验证对象是它应该是啥,但是将对象添加到数组中不起作用
Posted
技术标签:
【中文标题】我难住了。 NSLog 验证对象是它应该是啥,但是将对象添加到数组中不起作用【英文标题】:I'm stumped. NSLog verifies the object is what it's supposed to be, but adding the object to array isn't working我难住了。 NSLog 验证对象是它应该是什么,但是将对象添加到数组中不起作用 【发布时间】:2014-10-17 20:28:21 【问题描述】:jeoData 是一个单例...表格显示得很好,NSLog 验证选择了正确的行,但是,jeoData.crewList.count 在将对象添加到 NSMutableArray 后返回零...
在jeoData单例中,employeeList的初始化与crewList相同。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Employee *employee = [jeoData.employeeList objectAtIndex:indexPath.row];
[jeoData.crewList addObject:employee];
NSLog(@"SelectCrewVC: added: %@ %@", employee.firstName, employee.lastName);
NSLog(@" total selected: %lu", (unsigned long)jeoData.crewList.count);
NSLog:
2014-10-17 15:09:41.590 SaveAndLoad[98371:414247] SelectCrewVC: added: Jacob Johnson
2014-10-17 15:09:41.591 SaveAndLoad[98371:414247] total selected: 0
...即使 didDeselectRow 选择了正确的对象来显示,但我不知道为什么我不能将对象放入 crampList 数组中。
任何帮助将不胜感激,因为我很难过。
编辑:根据要求添加代码
JEOData.m(单例... init 发生的地方)
@implementation JEOData
@synthesize employeeList;
@synthesize leaseList;
@synthesize crewList;
@synthesize workReport;
+(id)sharedManager
static JEOData *sharedJEOData = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
sharedJEOData = [[self alloc] init];
);
return sharedJEOData;
-(id)init
if (self = [super init])
employeeList = [[NSMutableArray alloc] init];
leaseList = [[NSMutableArray alloc] init];
crewList = [[NSMutableArray alloc] init];
workReport = [[NSMutableArray alloc] init];
return self;
@end
jeoData在View Controller头文件的@interface中声明
@interface SelectCrewViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
JEOData *jeoData;
NSMutableArray *crewList; <---created only in troubleshooting, unused now
ViewDidLoad:
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
jeoData = [JEOData sharedManager];
self.crewSelectTable.allowsMultipleSelection = YES;
NSLog(@"Num of employees total :%lu", (unsigned long)jeoData.employeeList.count);
NSLog(@" employees in crew list: %lu", (unsigned long)jeoData.crewList.count);
NSLog 返回:
2014-10-17 15:09:39.473 SaveAndLoad[98371:414247] Num of employees total :3
2014-10-17 15:09:39.474 SaveAndLoad[98371:414247] employees in crew list: 0
因此,您可以看到 jeoData.employeeList 包含正确的对象,jeoData.leaseList 也是如此。我知道因为 NSLog 而调用了 DidSelectRows,所以我知道 Employee 对象很好并且还活着,但它不会让我将这个小虫子添加到 crampList 可变数组中。
我很确定我只是在忽略某些东西,但我不知道它是什么。
请帮助我们,欧比旺·克诺比,你是我们唯一的希望。
【问题讨论】:
我假设您在某个时候初始化了 crampList? 通过单例沿wemployeeList初始化,employeeList同样方法返回数据。 您在哪里验证过jeoData
和jeoData.crewList
都不是nil
?
Jeodata 不为零,可以访问employeeList。在调用第一个 didselectrow 方法之前,crewList 应该为 nil。
打印NSLog语句中的crewList,你就知道了。 NSLog(@"crewList:%@", jeoData.crewList);
【参考方案1】:
解决了,好吧,我知道我忽略了一些东西......
jeoData 单例类的第一次初始化发生在初始视图控制器中,然而,由于没有实际添加到 crampList 可变数组中,一旦对有问题的视图控制器进行了 segue,crowList 数组就消失了,而不是被像employeeList 一样保留。
我在 viewDidLoad 的 jeoData.crewList 上调用了 init 函数,它允许我在数组中添加/删除。
我现在唯一需要弄清楚的是,在移动到另一个视图控制器之后,它是否仍会保留数组中的对象。
【讨论】:
以上是关于我难住了。 NSLog 验证对象是它应该是啥,但是将对象添加到数组中不起作用的主要内容,如果未能解决你的问题,请参考以下文章