在Cocoa
中的viewDidLoad:方法之后创建的对象已解除分配请参阅以下代码:
#import "ShowTableViewController.h"
@interface ShowTableViewController ()
@property NSArray *data;
@end
@implementation ShowTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.data = @[@"One", @"Two", @"Three"];
NSLog(@"%ld",self.data.count);
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
NSLog(@"%ld",self.data.count);
return self.data.count;
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
return self.data[row];
}
@end
输出
3
0
我使用断点检查执行顺序viewDidLoad首先被调用!
我使用awakeFromNib
方法解决了这个问题。但我想知道为什么会这样
任何帮助将不胜感激。
答案 0 :(得分:2)
在像这样分配数组后,您需要在tableView
中重新加载viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
self.data = @[@"One", @"Two", @"Three"];
[self.tableView reloadData];
NSLog(@"%ld",self.data.count);
}
这解决了我的问题,希望它也能解决你的问题。
答案 1 :(得分:0)
我总是不得不反对。一个在界面构建器中,另一个由我在代码中创建。该对象未被取消分配。第二个对象被指定为数据源,因此它返回零。这是我的一个诚实的错误。抱歉浪费你的时间。谢谢大家的答案:)
答案 2 :(得分:-1)
尝试将您的数据属性声明为强大的
@property NSArray * data;
变为
@property(强)NSArray *数据;