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];
}

我遇到的问题是,虽然新的杂志对象正在保存并进入持久存储,但它们都没有连接到帐户!当然,每次都会显示 NSLog 语句——表示该线程上的帐户对象为 nil。

因此,即使我有一个有效的 objectId,因此该对象存在于持久存储中,我也没有通过 objectWithId 在私有线程上获取帐户对象。

任何想法为什么会这样?

谢谢

维生素B

4

1 回答 1

3

里面的东西是nil你不希望的nil

原因如下:objectWithID: 总是返回一个对象。但你得到nil. 最可能的原因是self.databaseConnector.getContext实际上是nil在该块中返回。可能accountForMagazine也是如此,但如果这是唯一出乎意料的情况,那么 您的应用程序将会崩溃(无法传递给该方法并继续运行)。nilnilnil

于 2013-04-04T22:55:29.417 回答