2011-08-17 171 views
1

下面的代码有什么问题吗?它有时会让我的应用崩溃。iOS appendFomat导致应用程序崩溃

- (NSString*) getDisplayString 
{ 
    NSMutableString* display = [[NSMutableString alloc] initWithString:@""]; 

for(NSUInteger i = 0; i < [entries count]; i++) 
{ 
    Entry* e = [entries objectAtIndex:i]; 
    [display appendFormat:@"%d. %@ %30d\n", i+1, e.title, e.value]; 

} 

    return display; 
} 
+1

发布崩溃详细信息和(不相关)您需要autorelease显示。 – Joe

+0

我很确定你需要用%d替换%30d。 –

+0

@Andreas Carlbom%30d没有任何问题。它只是指定格式的长度为30。 – Joe

回答

0

找到了我的问题的答案。问题是内存管理,我没有增加在Entry对象中找到的NSString标题的保留数。 title是通过文本字段从用户输入中获得的值,所以当UIView释放内部完成的字符串时,它不再存储在内存中,因此它使得错误看起来是随机的。

所以总结一下,无论你使用的是文本字段的值,你都需要增加它的保留数。

NSMutableArray* myArray = [[NSMutableArray alloc] init]; 
NSString* someStringToStore = uiTextField.text; 
[someStringToStore retain]; 
[myArray addObject: someStringToStore];