问题标签 [nsmanagedobjectid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
501 浏览

ios - 如何将 ManagedObjectID 传递给主线程

我将 ManagedObject 保存在具有自己上下文的后台线程上。然后,我想使用托管对象上下文将通知发送回主线程,以便我可以使用它的数据。

根据文档,看起来我应该将 id 传递给主线程而不是对象。

这是正确的,那我应该怎么处理那个Id呢?我应该使用 ID 从主线程获取核心数据以在主线程上获取 ManagedObject 吗?

0 投票
1 回答
366 浏览

objective-c - 设置两个对象之间的关系时出现 EXC-BAD-ACCESS

任何人都可以解释为什么给出以下 MagicalRecord 导入代码

这工作正常,设置关系并按预期保存

但这会导致 exec 访问错误,当我预计这在技术上更正确时,因为我正在使用本地上下文来保存我的数据。(注意:为简洁起见,我省略了从两个对象中获取 objectID 的代码)

当我尝试将对象分配给另一个对象中的关系时,我在最后一行获得了 exec bad access。

更新 1

此问题是由在另一个托管对象上下文中获取对象的本地副本时使用临时对象 ID 引起的。

更新 2

我发现只需更改用于检索对象的方法即可消除错误。

使用 existingObjectWithID 而不是 objectWithID 返回和对象具有永久 id 而不是临时的。

0 投票
0 回答
131 浏览

ios - 如何处理后台线程上已删除的实体?

我遇到了与多线程上下文中使用的 objectID 相关的问题。

我正在使用 objectIDs 向实体传递由后台线程调用的完成块,如下所示:

这曾经工作正常,直到我在网络请求正在进行时开始删除实体(不幸的是,我不能简单地取消它们),这让我遇到了 CoreData 未解决的错误错误。

为了解决这个问题,我开始使用 NSManagedObjectContext 的 existingObjectWithID: 方法。优点是如果对象不存在,它将返回 nil,但我遇到了另一个问题:如果 objectID 是临时的,existingObjectWithID 将返回 nil,尽管对象确实存在。

我尝试在创建实体时使用 gainPermanentIDsForObjects,但这并不理想,因为它意味着对持久性存储进行一些工作,并且随机崩溃。

是否有适当的方法来检查完成异步网络请求后实体是否仍然存在?

提前致谢 !

0 投票
2 回答
686 浏览

ios - 将 NSManagedObjectID 保存在 plist 文件中

我正在开发一个使用CoreData. 为了我的应用程序的目的,我想保存managedObjectId一个对象(在 plist 文件中),以便在下一次应用程序启动时检索该对象。

经过一些研究,我尝试了:

myPerson 是一个已保存在managedObjectContext.

接下来,我尝试检索 objectID,但使用此代码得到一个 nil 值:

你有什么建议吗?谢谢。

0 投票
1 回答
441 浏览

ios - 传递 NSManagedObject

我正在将一些代码从我的控制器移动到核心数据应用程序中的模型。

我编写了一个方法,该方法为我定期发出的特定获取请求返回一个 NSManagedObjectID。

现在在任何地方我都需要使用我这样做的方法:

现在这还不错,它可以工作并且它尊重 NSManagedObject 不是线程安全的,而 NSManagedObjectID 是线程安全的。我很高兴能够将相当多的代码从我的控制器类移到我的模型类别中。

然而,这还不够好。我真的很想以尊重线程安全的方式只用一行代码访问一个 NSManagedObject。我的理想是能够写出这样的东西:

这甚至可能吗?或者有没有人有任何策略来为 NSManagedObject 编写干净的访问器方法?

0 投票
1 回答
232 浏览

ios - 无法使用子托管对象子上下文将托管对象 ID 添加到 GCD 中的 NSMutableArray

我正在使用 GCD 以及核心数据。我知道 Core Data 不是线程安全的,所以我创建了以 mainContext 作为父级的子托管对象上下文(tempContext)。MainContext 有一个 PCS 来保存数据。我正在做的是:

  1. 从 Facebook 拉帖子
  2. 通过创建一个名为 Post 的新托管对象、更新并保存它,将每个帖子保存到 Core Data
  3. 在处理每个帖子时,如果需要额外处理,我会将 post.obectID 添加到托管对象 IDS 的 NSMutableArray 中。这个 NSMutableArray 被另一个进程用来完成更新帖子。我正在使用对象 ID,因为单独的进程不会在同一个 tempContext 中,因此我将使用对象 ID 从核心数据中获取帖子。

该过程获取数据,我看到它存储在 store.data 中(我使用名为 Base 的产品来查看物理数据库文件的内容)。但是,我似乎无法存储帖子的对象 ID。正如您在代码中看到的,我正在使用 NSLog 打印出帖子的对象 ID,并且我看到了它们,因此我知道对象 ID 在那里。代码还显示我正在做 [tempContext save] 并且我正在做 [mainContext save:],因此我现在应该有永久的,而不是临时的帖子对象 ID。同样,数据在 Core data 的物理文件中,但可变数组计数仍然 = 0。

将对象 ID 保存到 NSMutableArray 中我做错了什么?在代码中,您将看到我尝试在主队列上运行 [mutableArray addObject:p.objectID] 的位置被注释掉,但这并不重要。

这是我的代码:

}

在此先感谢您的帮助!

0 投票
1 回答
136 浏览

core-data - 大量 NSManagedObjects

应用程序具有包含大量对象的视图控制器,并且它具有严重的内存压力。有一个解决方案 - 只存储 managedObjectIds 数组而不是托管对象,但我不确定这是优化内存管理的最有效方法,因为对象 ID 也很长。有没有减少内存使用的解决方案?

0 投票
1 回答
374 浏览

ios - 保存后如何直接获取对象的 NSManagedObjectID?

保存后如何直接获取对象的 NSManagedObjectID?

我已经尝试使用NSNotification NSManagedObjectContextDidSaveNotification并获取更新/插入的值并从一个(唯一的)托管对象获取对象ID,但是当我尝试获取对象ID时它给了我“无法识别的选择器”。

我什至可以在保存后立即获得对象 ID 吗?

0 投票
1 回答
356 浏览

ios - 将 ManagedObjectID 存储在 NSDictionary 中

我正在处理本地通知,为了识别每个通知,它需要从核心数据模型中获取一个作为NSDictionaryManagedObjectID字典的键。

问题是当我这样做时,我收到以下错误:

这与字典只能存储某些数据类型而不是 NSManagedObjectID 的事实有关。

所以我的问题是,有没有办法将其转换NSManagedObjectId为 a NSStringorNSNumber例如。我真的需要那个特定的 id 以便稍后识别它以删除该特定通知。

到目前为止的代码:

0 投票
2 回答
2167 浏览

ios - 如何在 CoreData IOS 中正确获取 ObjectId?

我正在尝试使用 CoreData ObjectId 存储我的唯一记录。有时我成功地以这种格式获取 ObjectID

通过它我可以检索 id 即 4.But 有时它以 ObjectId 的这种格式返回

即 NSTemporaryObjectID_Default 这太烦人了。我从我的 IOS 模拟器中清理了我的项目,清理了 Xcode,但它不能正常工作。

这是我获取对象 ID 的代码:

请帮我。