0

複数のテーブル ビューを含むアプリケーションに取り組んでいます。アプリケーションはナビゲーション コントローラーを使用し、トランジションを処理するためにストーリーボードをセットアップしました。現在、これらのビューを 2 つ設定しています。1 つは「地域」タイプのオブジェクトを持つ「地域」用で、もう 1 つは「カテゴリ」タイプのオブジェクトを持つ「カテゴリ」用です。各ビューのコードでは、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;
}

カテゴリー:

これはおおよそ同じですが、regions 配列ではなく、categorys 配列を使用しています。配列: @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;

2行目を削除するだけです。

于 2012-09-18T16:24:15.563 に答える