iPhone应用程序中NSString stringWithString的问题

时间:2009-12-01 06:04:13

标签: objective-c iphone

这是我遇到问题的一些代码片段。我有一个适用于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];

2 个答案:

答案 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]的需求。