托管对象崩溃EXC_BAD_ACCESS

时间:2011-04-18 05:31:32

标签: iphone cocoa-touch core-data

我有一个托管对象,它有几个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。有谁知道发生了什么事?一切看起来都很好。

1 个答案:

答案 0 :(得分:5)

您不能将属性命名为“description”。参见:

Accessing a property in NSManagedObject causes memory spike and crash

参考(Apple文档):

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/CoreDataFramework/Classes/NSPropertyDescription_Class/NSPropertyDescription.html

  

属性描述单个值   在Core管理的对象中   数据框架。有不同的   财产类型,每个都由   一个子类,它封装了   具体的财产行为 - 见   NSAttributeDescription,   NSRelationshipDescription,和   NSFetchedPropertyDescription。

     

请注意,属性名称不能   与任何无参数方法相同   NSObject或NSManagedObject的名称。   例如,你不能给一个   属性名称“description”。那里   在NSObject上有数百种方法   这可能与财产发生冲突   名称 - 这个名单可以不增长   框架或其他方面的警告   库。你应该避免   一般词(如“font”,和   “颜色”)和单词或短语   与Cocoa范式重叠(例如   “isEditing”和“objectSpecifier”)