1

私のアプリでは、CoreData スタックに MagicalRecord を使用していますが、NSManagedObject の動作がおかしいです。DB から Stuff エンティティのすべてのエントリを取得する DB クラスにこのメソッドがあります。このメソッドを別のクラスから呼び出しています。この getStuff メソッド内で、以下のログ ステートメントに出力される正しい値を取得しています。

-(NSArray*) getStuff
{
    NSManagedObjectContext * managedObjectContext = [NSManagedObjectContext MR_contextWithStoreCoordinator:self.psc];

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Stuff"];

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"idNumber" ascending:YES];

    [request setSortDescriptors:[NSArray arrayWithObjects:sort, nil]];

    NSError *error = nil;
    NSArray *arr = [managedObjectContext executeFetchRequest:request error:&error];

    for (Stuff *stuff in arr) {
         NSLog(@"stuff fN: %@",stuff.idNumber);
    }

    if (arr)
       return arr;

    return [NSArray array];
}

ただし、このメソッドによって別のクラスに返される配列には、null 値を持つこれらすべてのオブジェクトが含まれています。

// -- some othe class
// call DB to check if we have stuff there
NSArray* stuff = [database getStuff];

for (Stuff *stuff in stuff) {
         NSLog(@"stuff fN: %@",stuff.idNumber);
    }

なぜこれが起こっているのか誰かが知っていますか?! どんな種類の助けも大歓迎です!

4

2 に答える 2

3

メソッドは新しいNSManagedObjectContextgetStuffを作成します。これは (ARC でコンパイルすると仮定して) メソッドの最後で割り当て解除されます。管理対象オブジェクトは、それらが作成されたコンテキストで「生きています」。コンテキストの割り当てが解除された後にそれらのプロパティにアクセスしても機能しません。

于 2013-09-30T20:11:23.140 に答える
1

CoreData スタックを MagicalRecord でセットアップすると仮定すると、[NSManagedObjectContext MR_contextForCurrentThread]代わりに使用できます[NSManagedObjectContext MR_contextWithStoreCoordinator:self.psc]

于 2013-09-30T20:29:44.173 に答える