我刚注意到我的应用程序使用Core Data存在一个奇怪的问题(之前没有发生过)。
以下是一段代码:
NSArray *allTransactions = [CDMTransaction transactionsFrom:_dateFrom to:_dateTo bankAccounts:_displayedBankAccounts categories:categories recipients:recipients tags:tags unclosedOnly:unclosedTransactionsOnly];
for (CDMTransaction *transaction in allTransactions) {
if (transaction.inverseTransaction != nil) {
...
}
}
问题的原因是对transaction.inverseTransaction
的调用。
CDMTransaction
是NSManagedObject
的子类,包含多个属性和关系(如inverseTransaction
)。
到目前为止一切正常,但是在调用此属性时出现崩溃:
CoreData:错误:警告snapshot_get_value_as_object调用NULL ,它将我发送到inverseTransaction
属性实现。
但是当我尝试记录allTransactions数组内容时,在输入" for"循环,它只是工作正常!
以下是更新后的代码:
NSArray *allTransactions = [CDMTransaction transactionsFrom:_dateFrom to:_dateTo bankAccounts:_displayedBankAccounts categories:categories recipients:recipients tags:tags unclosedOnly:unclosedTransactionsOnly];
NSLog(allTransactions: %@, allTransactions);
for (CDMTransaction *transaction in allTransactions) {
if (transaction.inverseTransaction != nil) {
...
}
}
我在日志控制台中得到了什么:
2015-01-11 11:54:51.613 Cash[14383:1403274] allTransactions: (
"<CDMTransaction: 0x7b94d4a0> (entity: CDMTransaction; id: 0x7b935f30 <x-coredata://12493FBF-2D83-469C-9610-D7C29E21F12B/CDMTransaction/p1> ; data: <fault>)"
)
......之后没有任何问题。
它似乎不是inverseTransaction属性的问题,因为它与所有其他属性(NSString
,XNSNumber
,...)和关系... < / p>
有什么问题?
编辑1:当崩溃时,我的属性实现行以绿色突出显示,出现EXC_BAD_INSTRUCTION错误(而不是EXC_BAD_ACCESS)
编辑2:当我向request.returnsObjectsAsFaults = NO;
添加NSFetchRequest
时,应用程序不再崩溃...所以现在似乎没关系,但我为什么要这样做写那个?它之前并不需要它......