我有以下代码,我将 buttonString(NSString
)的值传递给另一个 View Controller 。当设置了 buttonString = imageName;
然后在另一个 View Controller 上调用时,应用程序崩溃。
在@interface之前的FirstViewController的.h文件中:
extern NSString* buttonString;
在执行前FirstViewController的.m文件中:
NSString* buttonString = nil;
代码如下:
NSString *imageName = [NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ];
NSLog(@"imageName is %@", imageName);
[buttonImage setImage:[ImgUtil image:imageName]];
buttonString = imageName;
NSLog(@"buttonString %@", buttonString);
调用时 SecondViewController
出现问题:
NSLog(@"button Message is %@", buttonString);
如果我从 FirstViewController
中删除 buttonString = imageName;
,应用程序就不会崩溃。
感谢您的帮助。
最佳答案
发生这种情况是因为 buttonString
指向已释放的对象。
在您的代码段中,imageName 是一个自动释放的 NSString。当您说 buttonString = imageName;
时,它只是将 buttonString
指向与 imageName
相同的地址。此方法结束后,imageName
被释放,buttonString
指向的内存也被释放。
这就是当您在 NSLog 中引用 buttonString
时应用程序崩溃的原因。
理想情况下,您不应该像在 Objective C 中那样使用全局变量来共享数据。但是如果您只想完成这项工作,则需要在首次使用时为 buttonString
分配内存。确保在以后没有用时释放它。
注意:这仍然是一种糟糕的做事方式。
关于iphone - 将 NSString 传递给另一个 View Controller 会使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797390/