0

私は、NSManagedObjects のリストを取得する方法を見つけようとして髪を引き裂き、それらを別のビューに渡しています。

これが私のフェッチです

+ (NSArray *)fetchListOfParentSectors;
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Sector"];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"parent_id = -1"]];

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
    [moc setPersistentStoreCoordinator: [[JobDataModel sharedDataModel] persistentStoreCoordinator]];

    NSError *error = nil;
    NSArray *results = [moc executeFetchRequest:fetchRequest error:&error];
    if (error) {
        NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]);
        exit(1);
    }

    return results;
}

ここにセクタ名を記録するためにここにループを入れると、完全に機能します。

今、私のView Controllerにはこれがあります:

NSArray *objectArray = [FetchSectors fetchListOfParentSectors];
for (int i = 0; i < objectArray.count; i++) {
    Sector *sector = (Sector *)[objectArray objectAtIndex: i];
    NSLog(@"name = %@", sector.name);
}
NSLog(@"objects = %@", objectArray);

name return (null) のログ結果。正しい量のオブジェクトが返されているため、配列が空ではないことはわかっています。ログには、次のようにリストされた一連のオブジェクトが表示されます。

"<Sector: 0xac91020> (entity: Sector; id: 0xac8e900 <x-coredata://19C94F15-0A5B-4A40-8E68-17FE6C4950F8/Sector/p4> ; data: <fault>)"

私がここで見落としている単純なものがなければなりません..

4

1 に答える 1

3

コア データ オブジェクトは、管理対象オブジェクト コンテキストにのみ存在できます。でローカルに MOC を作成しますfetchListOfParentSectorsが、(ARC でコンパイルすると仮定して) この MOC は関数の最後で自動的に解放されます。したがって、オブジェクトの属性にアクセスするsection.nameと、MOC はもう存在しません。

この状況では実行時例外が発生すると予想していましたが、実際には、属性のアクセサーが返されるだけですnil(小さなテスト プログラムで確認済みです)。

したがって、 でローカル MOC を使用しても意味がありませんfetchListOfParentSectors。グローバル MOC を使用するか、View Controller で MOC を作成し、それをパラメーターとしてフェッチ関数に渡す必要があります。

于 2012-10-13T21:47:20.410 に答える