我有一个托管对象,它有几个NSStrings:
@interface Establishment : NSManagedObject
{
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * subtitle;
@property (nonatomic, retain) NSString * description;
我正在创建托管对象的实例并将字符串分配给标签,如下所示:
if ([establishmentData.name length]!= 0) {
estabName.text = establishmentData.name;
} else {
estabName.hidden = YES;
}
if ([establishmentData.subtitle length]!= 0) {
estabTitle.text = establishmentData.subtitle;
} else {
estabTitle.hidden = YES;
}
if ([establishmentData.description length]!= 0) {
estabDescription.text = establishmentData.description;
} else {
estabDescription.hidden = YES;
}
在这种情况下,name有一个值,但是subtitle和description是nil。当它到达副标题时,它成功地失败了if并隐藏了文本字段,但是当它到达描述时它崩溃了EXC_BAD_ACCESS。我尝试了简单的NSLogging establishmentData.description,它仍然崩溃
Backtrace抛弃了62,000行:
_PF_Handler_Public_GetProperty()中的62851 0x00d3dbbf
62852 0x00d3f2fb in - [NSManagedObject _descriptionValues]()
62853 0x00d3d6b5 in - [NSManagedObject description]()
以
结束62854 0x00004b90 in - [DataTable tableView:didSelectRowAtIndexPath:]
(self = 0x4d48df0,_cmd = 0x6d59e3, 的tableView = 0x505d200, indexPath = 0x6111b00)at /Users/Com_23/Documents/projects/Est_list/Classes/DataTable.m:330
62855 0x0032e794 in - [UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]
()
62856 0x00324d50 in - [UITableView _userSelectRowAtPendingSelectionIndexPath:]
()
__NSFireDelayedPerform()中的62857 0x000377f6 CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION
中的62858 0x00f67fe3
()
__CFRunLoopDoTimer()中的62859 0x00f69594 __CFRunLoopRun()
中的62860 0x00ec5cc9 CFRunLoopRunSpecific()中的
中的62861 0x00ec5240
CFRunLoopRunInMode()中的62862 0x00ec5161
GSEventRunModal()62863 0x018bb268 GSEventRun()
中的62864 0x018bb32d UIApplicationMain()
中的62865 0x002c742e
62866 0x00002958 in main(argc = 1,argv = 0xbfffefe4)at
/Users/Com_23/Documents/projects/Est_list/main.m:14
DataTable是我的UITableViewController。有谁知道发生了什么事?一切看起来都很好。
答案 0 :(得分:5)
您不能将属性命名为“description”。参见:
Accessing a property in NSManagedObject causes memory spike and crash
参考(Apple文档):
属性描述单个值 在Core管理的对象中 数据框架。有不同的 财产类型,每个都由 一个子类,它封装了 具体的财产行为 - 见 NSAttributeDescription, NSRelationshipDescription,和 NSFetchedPropertyDescription。
请注意,属性名称不能 与任何无参数方法相同 NSObject或NSManagedObject的名称。 例如,你不能给一个 属性名称“description”。那里 在NSObject上有数百种方法 这可能与财产发生冲突 名称 - 这个名单可以不增长 框架或其他方面的警告 库。你应该避免 一般词(如“font”,和 “颜色”)和单词或短语 与Cocoa范式重叠(例如 “isEditing”和“objectSpecifier”)