0

我正在开发一个涉及多个表视图的应用程序。该应用程序使用导航控制器,我设置了一个故事板来处理转换。我目前设置了其中两个视图,一个用于“区域”,对象类型为“区域”,另一个用于“类别”,对象类型为“类别”。在每个视图的代码中,我使用 RestKit 将适当的数据加载到一个数组中,然后使用该数据数组来创建表。如果先查看,每个视图都可以单独运行。但是,当我转换到一个视图、关闭它并尝试移动到另一个视图时,我的应用程序崩溃了。显示的异常表明将错误类型的数据加载到表的数组中。例如,如果我先转到类别视图,然后切换到“

编辑——这是将数据加载到表格单元格中的代码,以及一些说明。

如果每个表是要加载的第一个表,则每个表都包含正确的数据。只有在切换到另一个表视图时才会发生崩溃。异常已被注释到它们发生的代码中。“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 *categories; }

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;
}
4

1 回答 1

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;

只需删除第二行。

于 2012-09-18T16:24:15.563 回答