objective-c - ARC 在 NSTableview 重新加载数据之前释放我的 NSmutablearray

标签 objective-c cocoa nsmutablearray automatic-ref-counting

我的 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];
} 

数组为空。

该对象在 viewDidLoad 中初始化为

lOfSegments  = [[NSMutableArray alloc]init];

请帮忙!

最佳答案

首先,我建议使用 self.lOfSegments 来让您的代码更加清晰,而不是直接访问 ivar。 (ivar 缺少前导 _ 的事实也非常可疑,并提出了一个问题:这是否是您认为的变量。)

假设这是您认为的变量,并且您已经覆盖了标准行为以使 ivar 与属性匹配或创建了显式 ivars(您都不应该这样做),有几个常见原因此类问题:

  • 最可能的原因是您在 viewDidLoad 之前调用了初始化代码,然后 viewDidLoad 破坏了数组。许多事情可以在 viewDidLoad 之前运行,并且 viewDidLoad 可以运行多次(至少过去是这样;我必须研究 View 加载是否发生变化iOS 6 中保证只运行一次。)
  • 您可以通过其他方式在初始化代码运行和 reloadData 运行之间重置 lOfSegments。如果您能够可靠地使用 self. 那么您可以覆盖 setLOfSegments: 这样您就可以记录它。或者您可以将此属性标记为只读,以便可以阻止它。这是您应该使用属性而不是 ivars 的众多原因之一。
  • 设置代码在reloadData之前运行失败。确保日志语句在到达 reloadData 之前实际打印,并且位于同一队列上(队列标识符将是方括号中的 NSLog 输出的一部分)。根据您的描述,我认为这不太可能,但这是一个常见问题。
  • 该对象有两个实例。确保运行初始化代码的对象与运行 reloadData 的对象相同。这是一个比您想象的更常见的错误。记录self并确保两种情况下的内存地址相同。

关于objective-c - ARC 在 NSTableview 重新加载数据之前释放我的 NSmutablearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609046/

相关文章:

objective-c - 在调试器中打印一个字符串显示它的地址,而不是它的内容

iOS5 : Determine if core data method is running in an asynch dispatch queue?

ios - 从 NSMutableArray 中删除项目时应用程序崩溃,但仅当满足某些条件时

iphone - 如何存储/检索对象的 NSMutableArray?

objective-c - 我在 Objective C 中的调整中未声明的标识符 "UIColor"

iphone - iOS - CFSocket 没有得到回调

ios - masksToBounds 与 clipsToBounds

cocoa - 如何在 Xamarin.Mac 中检测 NSView 的调整大小?

objective-c - 订阅(或列出)所有应用程序分发的通知

ios - 更改 View 后数组变为 Null