2011-04-18 113 views
0

我有一个管理对象,有几个NSString的:管理对象崩溃EXC_BAD_ACCESS

@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; 
    } 

在这种情况下,名称有一个值,但字幕和说明是零。当它到达字幕时,它成功地失败了if和隐藏文本字段,但是当它描述它时会崩溃EXC_BAD_ACCESS。我试图简单地NSLogging establishmentData.description和它仍然崩溃

回溯抛出62000线的这样的:

62851 0x00d3dbbf在_PF_Handler_Public_GetProperty()

62852 0x00d3f2fb在 - )[NSManagedObject _descriptionValues](

62853 0x00d3d6b5在 - [NSManagedObject描述]()

和与

62854 0x00004b90在结束 - [数据表的tableView:didSelectRowAtIndexPath方法:]

(个体= 0x4d48df0,_cmd = 0x6d59e3, 的tableView = 0x505d200, indexPath = 0x6111b00)在 /用户/ Com_23 /文件/项目/ Est_list /班/数据表。米:330

62855在0x0032e794 - [UITableView的_selectRowAtIndexPath:动画:的scrollPosition:notifyDelegate:]

()

62856 0x00324d50在 - [UITableView的_userSelectRowAtPendingSelectionIndexPath:]

()

62857 0x000377f6 in __NSFireDelayedPerform()

62858 0x00f67fe3 in CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION

()

62859 0x00f69594在__CFRunLoopDoTimer()

62860 0x00ec5cc9在__CFRunLoopRun()

62861在CFRunLoopRunSpecific()

62862在CFRunLoopRunInMode 0x00ec5161(0x00ec5240)

62863 0x018bb2 68 GSEventRunModal()

62864在

0x018bb32d在GSEventRun()

62865 0x002c742e在UIApplicationMain()

62866在主(的argc = 1,的argv = 0xbfffefe4)0x00002958

/用户/ Com_23/Documents/projects/Est_list/main.m:14

DataTable是我的UITableViewController。有谁知道发生了什么事?一切看起来都很好。

+0

参见:HTTP: //www.cocoadev.com/index.pl?NSZombieEnabled启用NSZombies。 – magma 2011-04-18 05:35:09

回答

5

你不能给一个属性名称“描述”。参见:

Accessing a property in NSManagedObject causes memory spike and crash

参考(苹果文档):

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

甲属性描述了由核心 数据框架管理对象内的单个值 。有不同 类型的属性,每一个由 它封装的子类表示的 特定属性行为看到 NSAttributeDescription, NSRelationshipDescription,和 NSFetchedPropertyDescription。

请注意,属性名不能是 与任何非参数方法相同 NSObject或NSManagedObject的名称。 例如,您不能给 属性名称“description”。有 是NSObject 上的数百种方法,这些方法可能会与名称 名称发生冲突,而且此列表可以在没有来自框架或其他 库的 警告的情况下增长。你应该避免非常 一般的话(如“字体”,并 ‘色’)和单词或短语,并且 重叠可可范式(如 ‘isEditing’和‘objectSpecifier’)

+0

是的,改变了它。不能相信我以前没有找到。谢谢! – Beaker 2011-04-18 05:44:52

+1

我有一个名为newThumbnail的ManagedObject属性,在我的应用程序中的不同时刻访问该属性时出现访问崩溃的情况,这将成为导致Cocoa范例问题的保留字“新”。谢谢@magma – Des 2014-09-10 20:31:10