问题标签 [nsmanagedobject]

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 回答
1554 浏览

objective-c - NSManagedObject 的 NSPasteboard 类型

我需要在我的应用程序的两个表视图之间拖动对 NSManagedObject 的引用。存储对 NSManagedObject 的引用的首选 NSPasteboard 类型是什么?

我当前的解决方案是将对象的 NSManagedObjectID 的 URIRepresentation 存储在 NSPasteboardTypeString 中。我怀疑那里有一个更优雅的解决方案。

0 投票
1 回答
532 浏览

cocoa - NSManagedObject 子类问题

大家好,我有一个 NSManagedObject 的子类。在 awakeFromInsert 和 awakeFromFetch 中,我调用了一个初始化方法,其中包括启动一个 NSTimer。

现在我需要一个地方来使计时器无效。但是,不会调用 dealloc、finalize、didTurnIntoFault、prepareForDeletion 和 willTurnIntoFault。

根据文档,当对象从内存中清除时,这些方法都应该被调用。它们都不是,但是所有数据都保存在持久存储中。我对为什么或如何感到困惑。

有什么我可以做的事情可能导致这些方法在对象生命周期中不被调用吗?

0 投票
1 回答
1078 浏览

objective-c - 在 Core Data 中存储负整数

我可以正确地为托管对象模型实例的属性分配和检索正整数。但是,为该属性分配一个负整数会将数字“4294967295”记录到我的核心数据持久存储(一个 xml 文件)中。因此,当应用程序重新加载并重新实例化托管对象时,该属性读取“4294967295”。

此属性在我的 DataModel 中指定为 Integer 32 类型,并且具有“-12”的“最小值”。我猜这与将负整数存储为字符串有关。此代码产生相同的“4294967295”:

在 Core Data 中存储负整数的正确方法是什么?

0 投票
1 回答
5136 浏览

iphone - 在 NSManagedObjectContext 中调试 SIGABRT -save:

从 NSManagedObjectContext -save 内部:我收到此消息:

断言失败:(_Unwind_SjLj_Resume() 无法返回),函数 _Unwind_SjLj_Resume,文件 /SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c,第 326 行。

节目接收信号:“SIGABRT”。

警告:无法读取 /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib 的符号(找不到文件)。

当我删除一个带有运行的多对多的实验对象时,会发生这种情况,该对象具有多对多的样本,而样本具有多对一的数据。Experiment 也有 to-many,Page 有 to-many,Display 有 to-many to Run。我提到这一点是为了指出图表的周期性。这是模型的简化图:

替代文字

实验是用户与之交互的顶级实体。一个 Experiment 包含多个 Run 对象。运行是从特定时间开始并在稍后时间结束的数据集合。由于可以同时从多个来源收集数据,因此每次运行的每个来源都有一个样本。实验包含数据,需要查看这些数据并与之交互。因此,每个实验都有一定数量的页面对象,每个页面包含一定数量的显示(例如,图形、仪表)。显示器被配置为显示属于实验的某些运行子集。因此,虽然一个实验可能包含几十个运行,但它的一个页面一次只会显示其中几个运行。Display 实体维护这个列表。显示器不是一个看法。视图将引用 Display 对象并在 Display 对象的更改时收到通知。

我一直在使用删除规则,但现在已切换到“无操作”删除规则以及所有这些类的 -prepareForDeletion 方法。这种变化没有任何区别。在这两种情况下,错误消息是相同的。

有趣的是,当我重新启动应用程序时,所有标记为删除的对象都已删除。

此外,如果 Experiment 没有 Run 对象,则删除工作不会发生。就此而言,从实验中删除单个运行也可以。

我希望有人看到过这样的事情,并可以就导致这种情况的原因提供建议。或者,如果有人对如何为 iOS 4.2.1 获取 libXcodeDebuggerSupport.dylib 有建议,那也可能会有所帮助。

更新:我遵循了此处的建议,并且能够让 Xcode 找到适用于 iOS 4.2.1 的 libXcodeDebuggerSupport.dylib。但这对诊断问题完全没有帮助——问题仍然存在。

更新 2:阅读了一下并下载了 unwind-sjlj.c 版本后,似乎我正在处理类似未捕获异常的事情。我不确定这对我有什么帮助...

更新 3:感谢 Kamchatka,我做了几天前可能应该做的事情:打开“停止 Objective-C 异常”。这让我看到对已删除对象的引用仍在保留 - 更糟糕的是,键值对观察已删除对象。修复了这个已解决的问题,我能够恢复使用删除规则而不是 -prepareForDeletion 方法。

0 投票
1 回答
3270 浏览

iphone - @dynamic 使用的常见情况是什么?

之前有一篇关于@synthesize 和@dynamic 的区别的帖子。

我想从通常如何使用@dynamic 的角度了解更多关于动态的信息。

通常我们将@dynamic 与 NSManagedObject 一起使用

根据@dynamic的理解,实际上编译时并没有生成getter/setter,所以需要自己实现getter/setter。

我的问题是,在这种 NSManagedObject 案例中,超类 NSManagedObject 中 getter/setter 的粗略实现是什么?

除了上述情况,还有多少其他情况可以使用 @dynamic ?

谢谢,

0 投票
1 回答
127 浏览

objective-c - Retaining Managed objects - 更一般的保留对象

关于托管对象的快速问题。

我创建了一个带有托管对象的数组(在对象 1:TableViewConbtroller 中),并将其中一个对象传递给另一个类/对象(对象 2:TableCell)。

原始数组仍应保留在原始调用者类中。然后对象 2 被释放,这是否意味着数组中的特定项也被释放,因为对象 2 中对它的引用也被释放了?

当我收到“对象已释放”错误时,我试图更好地了解如何使用 ManagedObjects。

[编辑] 经过一些实验后,我遇到了以下场景:我有主 AppDelegate。在另一个类中,我创建了一个 AppDelegate 来获取 ManagedObjectContext。

当类完成时,我释放它,类“appDelegate”中的变量也被释放。但随后 ManagedObjectContext 被关闭,显然任何未来使用它的尝试都会导致崩溃。那么我应该不发布 appDelegate 吗?

这涉及到与上述相同的问题,即在从另一个类使用对象的情况下何时以及如何释放。我认为一种说法是,如何知道你什么时候拥有一个对象,什么时候不拥有。

0 投票
2 回答
1030 浏览

cocoa - 来自临时 URI 的永久 NSManagedObject URI?

我有一个 NSManagedObject 子类,它存储子对象的 URI。它最初在第一次创建子对象时存储临时 URI,并实现在保存之前-willSave调用-obtainPermanentIDsForObjects其 NSManagedObjectContext,以便只保留永久 ID。

不过,我遇到的问题是其他实例也存储临时 URI。当一个-willSave对象在具有相同子对象的另一个对象之后不久收到消息时,它也会调用-obtainPermanentIDsForObjects并获得一个不同的、错误的永久 URI,从而导致后续的 Core Data 错误错误,例如:

CoreData could not fulfill a fault for '0x102e4c110 <x-coredata://E17EE19B-E7F3-4102-ACFF-3E6F8BE8B104/MyEntityName/p2>'

我想要一种从 NSManagedObject 的旧的、临时的 URIRepresentation 到已经生成的新的、永久的 URIRepresentation 的方法。

我最初的想法是存储我自己的字典<temporary URI,permanent URI>并在使用之前进行查找-obtainPermanentIDsForObjects- 是否有一种更简单(更简单或内置)的方式我错过了?我在文档中发现的没有任何建议。

0 投票
2 回答
160 浏览

core-data - NSFetchRequest 数据成视图?

我刚刚开始使用 CoreData API,并且正在学习一些教程。我了解了存储和检索对象的基础知识,但是在连接所有 MVC 方面遇到了麻烦。

我有一个 CustomView,我用 CoreAnimation 在其中绘制了一些东西,包括一些将从 NSManagedObject 获取字符串的文本层。我从一个基本的 CoreData 应用程序模板开始,因此在 appDelegate 中声明了 managedObjectContext 等,我只是不确定如何将数据从 CoreData 堆栈获取到视图中。顺便说一句,这一切都在代码中,而不是界面构建器。

所以我的问题是,如果我想以纯 MVC 方式构建我的应用程序,我应该如何将数据从堆栈中获取到视图中?例如,我应该如何让我的视图访问初始化的 NSManagedObjectContext?

我一直在阅读 Cocoa 设计模式,但在谈到 MVC 时我有点傻。我知道这是一个非常笼统的问题,但如果有人可以说,“设置代表,抓住一个指针......”不管它是什么,那就太好了!

提前致谢!

0 投票
8 回答
26039 浏览

iphone - CoreData 问题:-[NSManagedObject setValue:]:无法识别的选择器发送到实例

我昨天刚开始使用 CoreData,我快疯了 :( 我创建了一个使用 CoreData 的项目(勾选框 - 使用 CoreData)。创建实体,然后为所有实体创建 NSManagedObject 类(我想他们创建实体的 'setter' 和 'getter' 方法)。

现在,我在我的 AppDeletegate 中 #imported 所有这些类,并在我的 applicationDidFinishLaunching 方法中写了这个:

(订阅是应用程序中的实体之一)

当我运行这个时,我得到这个错误

[NSManagedObject setTitle:]:无法识别的选择器发送到实例 0x6160550

我不知道为什么会这样。请帮忙!!!在此先感谢大家!

添加 Subscriptions
Subscriptions.h的标头

@interface Subscriptions : NSManagedObject {
}
@property (nonatomic, retain) NSString * Type;
@property(非原子,保留)NSDecimalNumber * 读取;
@property (nonatomic, 保留) NSString * Title;
@property(非原子,保留)NSString * 代码;
@property(非原子,保留)NSDecimalNumber * 新;
@结尾

我没有改变任何东西。就像 Xcode 创建它一样。

0 投票
3 回答
3413 浏览

cocoa - NSUndoManager,核心数据和选择性撤消/重做

我正在开发一个核心数据应用程序,该应用程序具有相当大的托管对象层次结构,类似于树。

创建基础对象时,它会创建一些子对象,这些子对象又会创建自己的子对象,依此类推。这些子对象中的每一个都可以使用 NSURLConnections 收集信息。

现在,我想通过 managedObjectContext 中的 undoManager 来支持撤消/重做。问题是,如果用户创建了一个基础对象,然后尝试撤消该操作,则不会删除该基础对象。相反,可以移除一个或多个子对象。显然,这种类型的动作是不可预测的和不受欢迎的。

所以我尝试默认禁用撤消注册。我通过disableUndoRegistration:在 managedObjectContext 中修改任何内容之前调用来做到这一点。然后,在基础操作(例如创建基础对象)之前启用撤消注册,然后再次重新禁用注册。

现在,当我尝试撤消时,出现此错误:

撤消:NSUndoManager 0x1026428b0 处于无效状态,撤消调用嵌套撤消组太多

想法?