我正在尝试打印(nslog)嵌入在我创建的PhotoView对象中的照片的名称。我创建了2个viewcontrollers类,并创建了PhotoView类,将UIButton类扩展为在以前的viewcontrollers之一中填充网格。
在PhotoView.h中,我有
@interface PhotoView : UIButton
@property (assign, nonatomic) NSString *photoName;
...
在PhotoView.m中,我有
self.tag = [[data objectForKey:@"PhotoID"] intValue];
self.photoName = [data objectForKey:@"PhotoName"];
在同一文件上打印出tag和photoName的值之后,一切看起来都不错。
当我单击PhotoView后尝试从另一个类打印photoName的值时,问题开始了
-(void)didSelectPhoto:(PhotoView*)sender
{
NSLog(@"%@", [NSString stringWithFormat:@"%@", sender.photoName]);
}
单击photoView后,出现EXC_BAD_ACCESS错误。
但是,如果我这样做
NSLog(@"%@",[NSNumber numberWithInt:sender.tag]])
我没有得到这个错误。
可能是什么问题?
提前致谢。
最佳答案
两句话:[NSString stringWithFormat:@"%@", sender.photoName]
-不,请!没有!不要那样做!它不仅多余而且浪费CPU周期,而且还会大大降低可读性。如果您有一个字符串,则不必像这样重复它,只需直接使用字符串对象:
NSLog(@"%@", sender.photoName);
您的实际错误是这样的:
@property (assign, nonatomic) NSString *photoName;
即您具有
assign
属性,因此它不会保留其值。当您的字符串对象超出范围时,它会被释放(并且由于它不是weak
,所以不会自动设置为nil
,但是它将保存无效指针所具有的任何垃圾值,从而导致崩溃)。改写@property (retain, nonatomic) NSString *photoName;
如果您不使用ARC,并且
@property (strong, nonatomic) NSString *photoName;
如果你是。
关于ios - 将字符串值传递给viewcontroller但获得EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14327432/