-1

あるエンティティからマネージド オブジェクトの配列を取得しています。executeFetchRequest が I NSLog 要素とそのプロパティを返した後、すべて問題ありません。新しく生成した配列を返し、それをバックグラウンド スレッドまたはその他のメソッドで使用しようとすると、配列内のマネージド オブジェクトのプロパティが nil になります。これはコードです:

Utakmice -NSManagedObject サブクラス

    - (NSArray*)ucitajPodatke:(NSDate*)zaDatum drzavaId:(int)_drzavaId
    {

            NSManagedObjectContext *con = [[NSManagedObjectContext alloc] init];
            [con setPersistentStoreCoordinator:persistentStoreCoordinator];
            [con setStalenessInterval:0];
            [con setUndoManager:nil];
            // create request and predicate
            // set return result type to NSManagedObjectResultType
            ...
            ...

        return fetchedObjects; -> This works cause I can log everything and all values R OK...
    }

    -(void)SomeMethod
        NSArray *array  = [self ucitajPodatke:danas drzavaId:self.drzavaId];

        Utakmice *tekma = [array objectAtIndex:0];
        NSLog(@"%i", [tekma.uniqueId intValue]); -> everything is fine


        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.35 * NSEC_PER_SEC);
            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

                if (array != nil && [array count]>0)
                {
                    Utakmice *tekma1 = [array objectAtIndex:0];
                    DLog(@"%@", tekma1.uniqueId);
                    DLog(@"%i", [tekma1.uniqueId intValue]); -> all properties have nil value
    ...
    ...

助言がありますか??ここからどこへ行けばいいのか本当にわかりません...

もう一つ。ucitajPodatke メソッドで、戻り値の型を NSDictionaryResultType に設定すると、すべて問題ありません... (マネージド オブジェクトが必要なため、リレーションが必要です)... Thx in advanced

4

2 に答える 2

0

最初に行う必要があるのは、取得した配列の強力な参照を維持することです。その後、ディスパッチを実行できます。

それは電話するのが良いでしょう

  [self performSelector:@selector(someMethod) withObject:nil afterDelay:0.35];

派遣する代わりに。

この問題は、「データ障害」にも関連している可能性があります。オブジェクト フィールドにアクセスすると、データが取得されます。フォールトせずにオブジェクトを完全にフェッチしたい場合は、使用できます

NSFetchRequest *request = ...;// your fetch request here
[request setReturnsObjectsAsFaults:YES];
// Fetch here
于 2013-11-05T15:46:28.387 に答える
-1

わかりました私は最終的にそれをグーグルで検索します: コアデータ - 複数のスレッド間で NSManagedObjects を共有する

U はスレッド間で管理対象オブジェクトを渡すことができないようです。代わりに、U は管理対象オブジェクト ID を渡す必要があります

于 2013-11-05T15:55:41.840 に答える