这是我遇到问题的一些代码片段。我有一个适用于99%用户的iPhone应用程序,但可能只有1%,我有这个我无法解决或重现的错误。该应用程序只是为他们冻结,并没有实际崩溃(所以没有崩溃报告)。一些临时分发测试揭示了这段代码中存在的问题。如果有人对问题可能有什么想法,请告诉我。 感谢。
NSString *addChar = nil;
NSString *fullname = (NSString *)ABRecordCopyCompositeName(record);
addChar = [[NSString stringWithString: [[fullname substringToIndex:1] capitalizedString]] retain];
[fname release];
NSMutableArray *array = [app_contacts objectForKey:addChar]; // lookup if key exists
if (array == nil) // if nothing in key, create new array
{
NSLog(@"array empty");
NSMutableArray *newarray = [[NSMutableArray alloc] init];
[newarray insertObject:one_person atIndex:0];
[app_contacts setValue:newarray forKey:addChar];
[newarray release];
}
else
{
NSLog(@"array not empty");
[array addObject:one_person];
[app_contacts setValue:array forKey:addChar];
}
[addChar release];
答案 0 :(得分:3)
在此代码中:
NSString *fullname = (NSString *)ABRecordCopyCompositeName(record);
addChar = [[NSString stringWithString: [[fullname substringToIndex:1] capitalizedString]] retain];
如果fullname等于@“”,则在调用[fullname substringToIndex:1]时会引发异常。
答案 1 :(得分:1)
你为什么这样做?
addChar = [[NSString stringWithString: [[fullname substringToIndex:1] capitalizedString]] retain];
你已经回来了一个字符串:
addChar = [[fullname substringToIndex:1] capitalizedString];
也消除了对[addChar release]
的需求。