Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心数据:删除未保存的对象时出错_Objective C_Cocoa_Core Data_Nsmanagedobject_Nsmanagedobjectcontext - Fatal编程技术网

Objective c 核心数据:删除未保存的对象时出错

Objective c 核心数据:删除未保存的对象时出错,objective-c,cocoa,core-data,nsmanagedobject,nsmanagedobjectcontext,Objective C,Cocoa,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,我在核心数据项目上遇到了一些问题。我有一个NSArrayController,里面有NSManagedObjects和+/-按钮。如果在保存文件后删除行中的某个对象,该对象将正常工作,但如果添加新对象,并立即再次删除该对象(不更改任何默认值),则会出现错误: Serious application error. Exception was caught during Core Data change processing: Unknown number type or nil passed t

我在核心数据项目上遇到了一些问题。我有一个NSArrayController,里面有NSManagedObjects和+/-按钮。如果在保存文件后删除行中的某个对象,该对象将正常工作,但如果添加新对象,并立即再次删除该对象(不更改任何默认值),则会出现错误:

Serious application error.  Exception was caught during Core Data change processing: Unknown number type or nil passed to arithmetic function expression. with userInfo (null)  
Unknown number type or nil passed to arithmetic function expression.  
如果我撤消添加新对象,情况也是如此


有人能给我指点怎么办吗?我假设这与它只有一个临时ID有关,但我不知道如何解决它。

表通常不包含NSManagedObject。相反,NSArrayController通过绑定将托管对象的属性作为值提供,或者使用符合NSTableViewDataSource的对象。在这两种场景中,删除所选对象的方法有很多种。问题是,你根本没有解释你的案子是如何成立的


您的删除(无论您的按钮连接到什么目标/操作)是否可能被传递为零或意外?我可以想象,如果您要求托管对象上下文删除浮点值或其他一些随机的东西,会出现类似的可怕错误。

我找到了问题和解决方案。为了记录在案,我将描述它


问题是对象在其init函数中添加了一个观察者。这可能是引发错误的原因。如果在删除对象之前删除对象本身作为观察者,则不会产生错误

对不起,我的描述有点太快了。正如您所说,NSArrayController保存着对象,并绑定到NSTableView。我试图检查我要删除的对象是否正确,是否正确。这没什么问题。几分钟后(1个或多个runloops)Ssssooooo…..也首次出现此错误。。。。。你到底是如何删除对象的?事情到底有多复杂?帮帮我们,帮你。装订工作完全是为了这本书。NSArrayController设置为实体模式,我的对象作为实体名称。该表已绑定到属性上的列。我认为问题不在这里我尝试过不同的删除方法。它们都会产生相同的错误[arrayController removeObject:theObject]和[managedObjectContext deleteObject:theObject]),但正如我所说,当我按下undo时也会出现错误。因此,只需在addobject->undo中说一句,就会产生错误。知道这个错误的真正含义吗?我一直在四处寻找,发现了一个疑点:多个上下文。我没有要求任何地方制作多个上下文,但我担心我得到了。我不知道是否有任何影响。在这方面,您不应该覆盖
NSManagedObject
-init…
方法或其
-dealoc
方法。如果需要添加观察者,应在
-awakeFromInsert
-awakeFromFetch
中添加。根据文档“覆盖注意事项的方法”,允许覆盖initWithEntity:insertIntoManagedObjectContext:amd dealloc这两个选项吗?我之所以使用init而不是awake,是因为我发现awake并不总是被调用(如果用户撤消或其他操作)。但是我可能错了。关于撤消和重做,您是对的,在10.6+中,还有一个附加的方法awakeFromSnapshotEvent,它也在撤消/重做中调用。作为10.5的一种解决方案,我更改了ManagedObjectContext,允许使用工作观察进行撤消和重做,但在initWithEntity中这样做是否有任何错误?只要我叫超级?