gpt4 book ai didi

ios - 尽管 objectId 有效,但 NSManagedObjectContext objectWithId 不返回对象

转载 作者:行者123 更新时间:2023-11-28 20:21:17 24 4
gpt4 key购买 nike

我有一个持久存储的核心数据结构 <-> 主线程上下文 <-> 私有(private)线程上下文(用作暂存器)。

我的用户在“私有(private)线程”/scratchpad 上下文中创建和配置杂志对象后按“保存”。

我从主线程上下文中获取当前登录的帐户,因为要创建的新杂志必须分配一个帐户。

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

NSLog输出的对象id是:

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

所以它是一个永久 ID,它告诉我该对象在持久存储中。

然后我切换到私有(private)线程(databaseConnector 只是私有(private)线程上托管对象上下文的包装器)并尝试将该帐户对象带到线程上,以便可以将其分配给将要访问的杂志对象得救。

[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 在私有(private)线程上获取帐户对象。

知道这是为什么吗?

谢谢

Vb

最佳答案

其中的某些内容是 nil,您不希望它是 nil

原因如下:objectWithID: 总是 返回一个对象。但是您得到的是 nil。最可能的原因是 self.databaseConnector.getContext 实际上在该 block 中返回了 nilaccountForMagazine 可能是 also nil 但如果那是唯一意外的 nil 那么您的应用程序将会崩溃(不能将 nil 传递给该方法并生效)。

关于ios - 尽管 objectId 有效,但 NSManagedObjectContext objectWithId 不返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com