我正在处理涉及多个表视图的应用程序。该应用程序使用导航控制器,我有一个故事板设置来处理转换。我目前设置了两个视图,一个用于“Regions”,对象类型为“Region”,另一个用于“Categories”,对象类型为“Category”。在每个视图的代码中,我使用RestKit将适当的数据加载到数组中,然后使用该数据数组来创建表。如果先查看,每个视图都可以自行运行。但是,当我转换到一个视图,关闭它,并尝试移动到另一个视图时,我的应用程序崩溃了。显示的异常表明正在将错误类型的数据加载到表的数组中。例如,如果我首先转到Categories视图,然后切换到“Regions”视图,应用程序似乎我的“Regions”数组包含“Category”类型的对象。有没有其他人对表混淆数据的问题?怎么可以解决这个问题?感谢。
编辑 - 以下是将数据加载到表格单元格中的代码,以及一些说明。
如果是第一个要加载的表,则每个表都包含正确的数据。只有在切换到其他表视图时才会发生崩溃。已将异常注释到它们出现的代码中。 “categoryName”和“regionName”是各自类型的属性。
地区:
在顶部,我创建了数组区域:
@interface RegionListingsController () {
NSArray *regions;
}
Restkit onDidLoadObjects方法:
loader.onDidLoadObjects = ^(NSArray *objects) {
NSLog(@"Objects Loaded");
regions = nil;
regions = objects;
[self.tableView reloadData];
};
创建表格单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
Region *region = [[Region alloc] init];
region = nil;
region = [regions objectAtIndex:indexPath.row];
NSLog(@"region");
cell.textLabel.text = region.regionName; // Exception: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Category regionName]: unrecognized selector sent to instance 0xce87240'
return cell;
}
分类
这大致相同,只是使用类别数组而不是区域数组。 阵: @interface CategoryListingsController(){ NSArray *类别; }
onDidLoadObjects:
loader.onDidLoadObjects = ^(NSArray *objects) {
NSLog(@"Objects Loaded");
categories = objects;
objects = nil;
[self.tableView reloadData];
};
表格单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
Category *category = [[Category alloc] init];
category = nil;
category = [categories objectAtIndex:indexPath.row];
NSLog(@"Category Cell");
cell.textLabel.text = category.categoryName; // Exception: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Region categoryName]: unrecognized selector sent to instance 0xce87240'
NSLog(@"Cell returned");
return cell;
}
答案 0 :(得分:0)
我猜你正在保留这些物品。这里:
regions = objects;
在这里:
categories = objects;
您可以自己创建一些@properties (nonatomic, retain)
至regions
和categories
,然后:
self.regions = objects;
和,
self.categories = objects;
另外,请注意您执行此操作的顺序:
regions = nil;
regions = objects;
categories = objects;
objects = nil;
如果您使用@properties
方法,则不需要nil
之前的值。也不需要这样做(@properties
的事件):
self.categories = objects;
objects = nil;
只需删除第二行。