我的NSMutableArray lOfSegments,声明为IVAR,正确填充。在调试期间,它在数组中显示4个对象。
for (int x=0; [arrayOfSegmentsTcIn count]>x; x++) {
NSDictionary *segmentDic=[[NSDictionary alloc] initWithObjectsAndKeys: [arrayOfSegmentsNumbers objectAtIndex:x],@"segment",[arrayOfSegmentsTcIn objectAtIndex:x],@"tc_in",[arrayOfSegmentsTcOut objectAtIndex:x],@"tc_out", nil];
[lOfSegments addObject:segmentDic];
[myDMXML.segments addObject:segmentDic];
}
[self.xmlTCLable setStringValue:[myDMXML startTimeCode]];
[self.xmlDurationLable setStringValue:[myDMXML duration]];
[self xmlValidationCheck];
NSLog(@"arrayController:%@",[lOfSegments valueForKey:@"segment"]);
[self.tableViewOutlet reloadData];
NSLog正确列出数组但是当执行reloadData时,代码跳转到
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [lOfSegments count];
}
数组为空。
Object在viewDidLoad中初始化为
lOfSegments = [[NSMutableArray alloc]init];
请帮助!
答案 0 :(得分:1)
首先,我建议您使用self.lOfSegments
而不是直接访问ivar,从而使代码更加清晰。 (ivar缺少一个领先的_
这一事实也是非常可疑的,并提出了这是否是你认为的变量的问题。)
假设这是您认为的变量,并且您已覆盖标准行为以使ivar与属性匹配或创建显式ivars(您都不应该这样做),有几个常见原因这种问题:
viewDidLoad
之前调用了初始化代码,然后viewDidLoad
吹走了数组。许多内容可以在viewDidLoad
之前运行,viewDidLoad
可以运行多次(至少过去是这样;我必须研究iOS 6中的视图加载更改是否保证要运行一次。)lOfSegments
之间,还有其他方法可以重置reloadData
。如果您可以可靠地使用self.
,那么您可以覆盖setLOfSegments:
,以便记录此内容。或者你可以只读标记这个属性,这样你就可以防止它。这是你应该使用属性的许多原因之一,而不是ivars。reloadData
之前运行。确保在到达reloadData
之前实际打印的日志语句位于同一队列中(队列标识符将成为括号中NSLog
输出的一部分)。我不认为这可能是你的描述,但这是一个常见的问题。reloadData
的对象相同。这是你可能会想到的一个更常见的错误。记录self
并确保两种情况下的内存地址相同。答案 1 :(得分:0)
看起来您在方法lOfSegments
中拥有同名viewDidLoad
的变量。因此,在viewDidLoad
中,您在numberOfRowsInTableView
- 实例变量。
或者tableViewOutlete.dataSource
指向不同的viewController