我有一个非常简单的应用程序来学习如何使用UITableView中的部分,但有一个例外 -
2013-09-17 08:46:19.956章[4497:c07] * - [__ NSArrayI objectAtIndex:]:发送到解除分配的实例0x9566d40的消息
整个方法如下 - 需要帮助。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
self.names = dict;
NSArray *array = [[_names allKeys] sortedArrayUsingSelector:@selector(compare:)];
_keys = array;
}
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
NSLog(@"%lu", (unsigned long)[_keys count]);
return [_keys count];
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSString *key = [_keys objectAtIndex:section];
NSArray *nameSection = [_names objectForKey:key];
return [nameSection count];
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
NSString *key = [_keys objectAtIndex:section];
NSArray *nameSection = [_names objectForKey:key];
static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SectionsTableIdentifier];
}
cell.textLabel.text = [nameSection objectAtIndex:row];
return cell;
}
- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *key = [_keys objectAtIndex:section];
return key;
}
答案 0 :(得分:1)
您必须保留_keys
数组:
_keys = [[[_names allKeys] sortedArrayUsingSelector:@selector(compare:)] retain];
答案 1 :(得分:1)
在这里,您首先在其他数组中获取值,然后将其传递给_ keys
..这不是正确的方法..
直接将值传递给_keys,如下所示
_keys = [[_names allKeys] sortedArrayUsingSelector:@selector(compare:)];
同时检查self.names
,你在做同样的事情。
希望这会对您有所帮助。