【发布时间】:2009-04-03 08:07:35
【问题描述】:
我正在尝试使用 UITableViewController(视图的委托和数据源)来显示从 Plist 读取的简单表。 Plist 包含一个 NSDictionary,它本身包含几个 NSDictionary 对象,这些对象代表我的应用程序中使用的对象。
其余代码看起来像这样(简化):
- (void)viewDidLoad {
[super viewDidLoad];
[self loadObjectsFromPlist];
}
- (void)loadObjectsFromPlist {
NSString *objectPlistFile = [[NSBundle mainBundle] pathForResource:@"Objects" ofType:@"plist"];
NSDictionary *objectsDictionary = [NSDictionary dictionaryWithContentsOfFile:objectsPlistFile];
objects = [[NSMutableArray alloc] init];
NSEnumerator *objectEnumerator = [objectsDictionary objectEnumerator];
NSDictionary *objectData;
while(objectData = [objectEnumerator nextObject]) {
[objects addObject:[MyObject objectFromDictionary:objectData]];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [objects count];
}
由于我没有使用任何部分,因此我在控制器的 numberOfSectionsInTableView 中返回 1。
“MyObject”的objectFromDictionary 方法将从NSDictionary 读取的数据分配给一个新对象。我也尝试过保留、复制等,但这并没有改变任何东西。
当我调用[objects count] 时,我在tableView:numberOfRowsInSection 中得到一个EXC_BAD_ACCESS。我尝试使用对象分配工具,但没有发现问题。我的 Plist 当前仅包含一个对象的数据。调试器为objects 属性显示红色的“1 个对象”,所以我认为这与问题有关。
【问题讨论】:
-
需要注意的是,调试器中“1 个对象”变量的红色仅仅意味着它的值在应用程序上次活动时发生了变化。 (例如,添加或删除了某些内容。)
-
啊,好的...谢谢您清除它。所以这与我的问题无关,对我来说更加神秘。
-
可能只是一个转录错误,但你有 [object addObject: [MyObject...,它可能应该是 [objects addObject...
-
是的,只是转录错误。
标签: iphone objective-c cocoa-touch