我的应用程序中遇到了一些NSString的问题。基本上,我有一个名为o1string的NSString,它包含值“602”。我想在UIAlertView中输出这个以及其他一些文本。
votedmessage = [ NSString stringWithFormat:@"The current standings are as follows:\n\n%@: %@ votes", b1title, o1string ];
UIAlertView *votedAlert = [[UIAlertView alloc] initWithTitle:@"Thank you for voting" message:votedmessage delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
我已经使用了NSLog并验证了NSString中的值肯定是602,而消息中使用的另一个变量(b1title)自己输出正常。当我将o1votes变量添加到警报消息时,我无法弄清楚为什么应用程序崩溃了,是否与在NSString中只保留一个数字的冲突有关?
这是o1string的设置方式。它肯定包含“602”,从XML文件中获取。
o1string = [[options objectAtIndex:3] objectForKey: @"votes"];
o1string = [o1string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
o1string = [o1string stringByReplacingOccurrencesOfString:@" " withString:@""];
答案 0 :(得分:6)
除非o1string的赋值与创建votedmessage的方法相同(因为你没有说,我假设没有),当你到达votedmessage需要它的代码时它将会消失。 / p>
除非您正在使用垃圾收集,否则您需要保留要在当前方法之后保留的对象。有关完整的详细信息,请参阅Objective-C memory management guide。
答案 1 :(得分:0)
您需要发布更多代码。特别是不清楚你发布的两件作品是在同一个功能还是在不同的地方。
如果他们在不同的地方你必须调用[o1string retain](以及后来的[o1string release])。最简单的方法是使olstring成为具有保留语义的属性。
stringByReplacingOccurrencesOfString返回一个临时实例,该实例将在函数存在后的某个时间自动释放。
我猜猜b1Title的工作原理是它存储在你的字典中所以是持久的。 o1string是从stringByXXX函数创建的,是临时的。