我偶尔会看到像这样的堆栈跟踪崩溃:
0 libobjc.A.dylib 0x97dc0edb objc_msgSend + 27
1 com.apple.CoreData 0x97edcdc2 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 162
2 com.apple.CoreData 0x97edccbe -[NSManagedObject release] + 94
3 com.apple.CoreFoundation 0x9318ef38 CFRelease + 152
4 com.apple.CoreFoundation 0x931a7460 __CFBasicHashStandardCallback + 384
5 com.apple.CoreFoundation 0x931a706e __CFBasicHashDrain + 478
6 com.apple.CoreFoundation 0x9318f101 _CFRelease + 353
7 com.apple.CoreFoundation 0x931bbc6d _CFAutoreleasePoolPop + 253
8 com.apple.Foundation 0x973270aa NSPopAutoreleasePool + 76
9 com.apple.Foundation 0x97326fd2 -[NSAutoreleasePool drain] + 130
10 com.apple.AppKit 0x95087185 -[NSApplication run] + 627
11 com.apple.AppKit 0x9507f2d9 NSApplicationMain + 574
12 com.karelia.Sandvox 0x70001ef6 …Run Code Online (Sandbox Code Playgroud) 是否可以找到保存后在托管对象上保存的属性?例如,我有人在监听托管对象上下文保存(NSManagedObjectContextDidSaveNotification),我想知道对象的哪些属性已保存.
core-data objective-c nsmanagedobject nsmanagedobjectcontext
我通过以下关系访问核心数据对象:
pArret.zzone?.libelle
Run Code Online (Sandbox Code Playgroud)
第一个对象与第二个对象具有To-one关系,并且libelle是第二个对象的属性.
我收到以下错误: -[_NSCoreDataTaggedObjectID libelle]: unrecognized selector sent to instance 0xd00000000e30000c.我不知道这个私有_NSCoreDataTaggedObjectID类是什么,为什么我没有NSManagedObject按预期获得我的子类?
我正在研究一个核心数据应用程序,它具有相当大的托管对象层次结构,类似于树.
创建基础对象时,它会创建一些子对象,这些子对象又创建自己的子对象,依此类推.这些子对象中的每一个都可以使用NSURLConnections收集信息.
现在,我想在managedObjectContext中使用undoManager支持undo/redo.问题是,如果用户创建基础对象,然后尝试撤消该操作,则不会删除基础对象.相反,可以移除一个或多个子对象.显然,这种行为是不可预测的,也是不受欢迎的.
所以我尝试默认禁用撤消注册.我通过disableUndoRegistration:在managedObjectContext中修改任何内容之前调用来完成此操作.然后,在基本操作(例如创建基础对象)之前启用撤销注册,再次重新禁用后续注册.
现在,当我尝试撤消时,我收到此错误:
undo:NSUndoManager 0x1026428b0处于无效状态,使用过多的嵌套撤销组调用undo
思考?
cocoa core-data nsundomanager nsmanagedobject nsmanagedobjectcontext
我有一个NSManagedObject的子类,大多数属性是动态的(由托管对象创建),但我有一些辅助属性,它们被创建为@synthesize.
释放这些物体的正确方法是什么?
- (void)didTurnIntoFault
{
[self.randomVar release];
[super didTurnIntoFault];
}
Run Code Online (Sandbox Code Playgroud)
要么
- (void)dealloc
{
[self.randomVar release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud) 我正在使用CoreData,并想知道我是否可以以某种方式扩展我的NSManagedObjects来做自定义的东西(比如删除属于这个实例的文件).
在我的例子中,我有几个CoreData实体,每个实体可能有一个存储在属性中的文件夹或文件路径.如果实体被删除,我希望这个实体负责自己删除引用的文件.
与"级联"删除规则结合使用时,此类行为特别有用,因为删除实体会删除所有子实体及其文件.
如果没有这样的机制,我会为包含自定义删除方法的每个实体编写一个类别,包括可能有子节点的实体的级联行为.
你会做什么,我的问题有一个优雅的解决方案吗?之前已经讨论过了,我还没有找到它吗?
非常感谢!
保罗
很多用户通过HockeyApp报告了一个奇怪的崩溃,其中包含以下堆栈跟踪.它似乎与NSManagedObject在不同的调度队列中发布有关...但我没有得到问题可能出现的任何符号.这似乎是一个内存管理问题,但我正在使用ARC,因此不确定如何过度释放NSManagedObject.
这是我得到的崩溃报告(主线程在不同时间显示不同的跟踪):
Code Type: ARM-64
Parent Process: launchd [1]
Date/Time: 2014-05-12T05:43:54Z
OS Version: iPhone OS 7.0.6 (11B651)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x1c3dbeb8
Crashed Thread: 2
Application Specific Information:
objc_msgSend() selector name: _queueForDealloc:
Thread 0:
0 CoreFoundation 0x000000018e384618 CFNumberGetType + 0
1 CoreFoundation 0x000000018e3333b8 _CFAppendXML0 + 2768
2 CoreFoundation 0x000000018e333304 _CFAppendXML0 + 2588
3 CoreFoundation 0x000000018e332268 _CFPropertyListCreateXMLData + 196
4 Foundation 0x000000018ef152f4 -[NSDictionary(NSDictionary) writeToFile:atomically:] + 232
5 SimpleList 0x00000001001ae48c __55-[SharedSettingController writeToContactsReferenceFile]_block_invoke (SharedSettingController.m:620)
6 libdispatch.dylib 0x000000019a974420 …Run Code Online (Sandbox Code Playgroud) 有没有办法删除已插入上下文但尚未保存的单个托管对象?我想删除单个对象,而不是回滚整个上下文.我已经尝试过调用deleteObject:但它会引发异常,因为根据核心数据,该对象在MOC中尚不存在.通过查看核心数据的插入对象属性,我肯定知道它已被插入,并且通过查看已删除的对象,我知道它已被标记为删除.基本上我想"取消插入"对象.先保存然后删除是不可接受的.谢谢.
在托管对象中,我已经存储了应用程序容器中图像文件的路径.
删除托管对象后,应将图像文件移至废纸篓.这应该尽可能晚地完成,以便我可以尽可能长时间地提供撤消功能.
我正在按照这个问题的答案:如何在删除Core Data对象时处理外部数据的清理,并在我的托管对象子类中重写-didSave以废弃文件.
事实证明,这仅适用于:
但是,在以下情况中,未在托管对象中调用-isSaved:
我理解为什么会这样.由于删除的对象从未在第一个地方持久存在,因此在删除后不会保存它,也不会调用-didSave.
现在我正在寻找另一个将引用文件移动到垃圾箱的地方.那可能在哪里?
Xcode 9为Date模拟器与设备中的实体的类型属性生成不同的代码.我在coredata中设置了codegen功能.Classcategory/extension
直到Xcode 8.3(最新)它一切正常(NSDate总是).下面是Xcode 9(Swift 4)为属性自动生成的代码 -
在设备上: -
@NSManaged public var requiredDate: Date?
Run Code Online (Sandbox Code Playgroud)
和,
在模拟器上: -
@NSManaged public var requiredDate: NSDate?
Run Code Online (Sandbox Code Playgroud)
有谁遇到过这个问题?对于一个有50多个成员的项目来解决这个问题的最佳解决方案是什么,直到Xcode更新修复它(我希望有一个苹果雷达)?
core-data ×10
nsmanagedobject ×10
ios ×4
objective-c ×4
cocoa ×3
cocoa-touch ×1
codegen ×1
date ×1
macos ×1
xcode ×1