0

私のコードでは、リストセクションを使用してtableViewを作成したいと思います。私はこのようなスキームを使用します:

ここに画像の説明を入力してください

私はこのように定義したNSFetchResultControllerを使用します:

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Item" inManagedObjectContext:coreDataController.masterManagedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                          initWithKey:@"addedAt" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:20];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemIsChecked = 1"];

    [fetchRequest setPredicate:predicate];
    [fetchRequest setResultType:NSDictionaryResultType];

    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:coreDataController.masterManagedObjectContext sectionNameKeyPath:@"toList.listName"
                                               cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}

今cellForRowAtIndexPathで:私は私のfetchResultControllerからデータを取得したいので、私はこれを次のように行います:

Item *item = [self.fetchedResultsController objectAtIndexPath:indexPath];

次に、アイテムのフィールドの1つ(たとえばitemText)にアクセスしたい場合、クラッシュします。

NSLog(@"item itemtext = %@", item.itemText);

エラーあり:

-[NSKnownKeysDictionary1 itemText]: unrecognized selector sent to instance 0x1215fd90

私のコードで何が間違っていますか?

4

2 に答える 2

2

設定しました

[fetchRequest setResultType:NSDictionaryResultType];

したがって、フェッチされた結果コントローラーはNSDictionary、オブジェクトではなくItemオブジェクトを返します。だからあなたの要素

Item *item = [self.fetchedResultsController objectAtIndexPath:indexPath];

ではNSDictionaryなく、Itemです。itemText辞書にはメソッドがないため、item.itemTextクラッシュします。辞書から値を取得できます

NSDictionary *item = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"item itemtext = %@", [item objectForKey:@"itemText"]);

ただし、結果タイプを に設定する特定の理由がない場合は、NSDictionaryResultTypeその行を削除するだけです。フェッチされた結果コントローラの変更追跡 (つまり、テーブル ビューの自動更新) は では機能しませんresultType == NSDictionaryResultType

を設定した場合はsectionNameKeyPath、同じキーパス「toList.listName」を持つソート記述子を追加し、それをフェッチ要求の最初のソート記述子として使用する必要があることにも注意してください。

于 2013-01-20T11:16:20.150 に答える
0

unrecognized selector sent to instance通常、不適切なメモリ管理が原因で発生します。以前にリリースされたオブジェクトをポイントしようとしているかどうかを確認してください。また、 lable の xib で IBOutlet 接続を確認しますitemText

于 2013-01-20T11:16:13.197 に答える