我有一个 NSManagedObject 的子类,其中包含一些真正是枚举的“整数 32”属性。这些枚举在我的模型的 .h 文件中定义,如下所示:
typedef enum {
AMOwningCompanyACME,
AMOwningCompanyABC,
AMOwningCompanyOther
} AMOwningCompany;
我需要显示一个表格视图来显示此自定义对象的每个属性的值,因此对于每个枚举,我都有一个看起来像这样的方法来返回字符串值:
-(NSArray*)stringsForAMOwningCompany
{
return [NSArray arrayWithObjects:@"ACME Co.", @"ABC Co.", @"Other", nil];
}
在我的表格视图中,我遍历了我的属性NSManagedObject
(使用NSEntityDescription
'sattributesByName
并且对于每个属性,我调用一个辅助方法,该方法调用适当的“stringsFor”方法来返回该特定属性的字符串:
-(NSArray*)getStringsArrayForAttribute:(NSString*)attributeName
{
SEL methodSelector = NSSelectorFromString([self methodNameForAttributeNamed:attributeName]);
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:[[AMProperty class] instanceMethodSignatureForSelector:methodSelector]];
[invocation setSelector:methodSelector];
[invocation setTarget:self.editingPole];
[invocation invoke];
NSArray* returnValue = nil;
[invocation getReturnValue:&returnValue];
return returnValue;
}
我的表格视图cellForRowAtIndexPath
如下所示:
...
NSString* itemName = self.tableData[indexPath.row];
NSAttributeDescription* desc = itemAttributes[itemName];
NSString* cellIdentifier = [self cellIdentifierForAttribute:desc]; // checks the attribute type and returns a different custom cell identifier accordingly
if ([cellIdentifier isEqualToString:@"enumCell"])
{
// dequeue cell, customize it
UITableViewCell* enumCell = ...
...
NSArray* stringValues = [[NSArray alloc] initWithArray:[self getStringArrayForAttribute:itemName]];
int currentValue = [(NSNumber*)[self.editingPole valueForKey:itemName] intValue];
enumCell.detailTextLabel.text = (NSString*)stringValues[currentValue];
return enumCell;
}
...
NSInvocation
仅对于其中一个属性,我一直在返回数组上崩溃:
-[__NSArrayI release]: message sent to deallocated instance 0x856a4b0
使用 Zombies Profiler,我看到:
我正在使用 ARC。我该如何进一步调试呢?