0

永続ストア <-> メイン スレッド コンテキスト <-> プライベート スレッド コンテキスト (スクラッチパッドとして使用) のコア データ構造があります。

「プライベート スレッド」/スクラッチパッド コンテキストでマガジン オブジェクトを作成および構成した後、ユーザーが「保存」を押します。

作成する新しいマガジンにはアカウントを割り当てる必要があるため、現在ログインしているアカウントをメイン スレッド コンテキストからフェッチします。

Account* accountForMagazine = [self.accountsConnector getSelectedAccount];
NSLog(@"object id: %@",accountForMagazine.objectID);

オブジェクト ID NSLog の出力は次のとおりです。

0xa677790 <x-coredata://F635CE5A-C335-48F0-BB27-61B7D9XXXXD8/Account/p4>

これは永続的な ID であり、オブジェクトが永続的なストアにあることを示しています。

次に、プライベート スレッドに切り替え (databaseConnector は、プライベート スレッド上の管理対象オブジェクト コンテキストの単なるラッパーです)、そのアカウント オブジェクトをスレッドに移動して、保存されるマガジン オブジェクトに割り当てることができるようにします。

[self.databaseConnector executeOnCorrectThread:^
{
    Account* account = (Account*)[self.databaseConnector.getContext objectWithID:accountForMagazine.objectID];
    self.magazine.account = account;
    if(!account) { NSLog(@"nil account"); }
    [self.databaseConnector save];
}

私が抱えている問題は、新しい雑誌のオブジェクトが保存され、永続的なストアに作成されているにもかかわらず、アカウントに接続されていないことです! そしてもちろん、このスレッドのアカウント オブジェクトが nil であることを示す NSLog ステートメントが毎回表示されます。

したがって、有効な objectId を持っているため、オブジェクトが永続ストアに存在する場合でも、objectWithId を介してプライベート スレッドでアカウント オブジェクトを取得できません。

それはなぜですか?

ありがとう

VB

4

1 に答える 1