我在以下行收到错误 EXC_BAD_ACESS:
NSString *titleVarName = [[NSString alloc] initWithFormat:@"%@%@",@"occasionTitle",i];
这里是上面代码行所在的for循环:
for (i=0; i < count; ++i)
{
//Save the occasionS details to NSUserDefaults
NSString *titleVarName = [[NSString alloc] initWithFormat:@"%@%@",@"occasionTitle",i];
NSString *dateVarName = [[NSString alloc] initWithFormat:@"%@%@",@"occasionDate",i];
NSString *imageVarName = [[NSString alloc] initWithFormat:@"%@%@",@"occasionImage",i];
[[NSUserDefaults standardUserDefaults] setValue:[[[self displayedObjects] objectAtIndex:i]
title] forKey:titleVarName];
[[NSUserDefaults standardUserDefaults] setValue:[[[self displayedObjects] objectAtIndex:i]
date] forKey:dateVarName];
[[NSUserDefaults standardUserDefaults] setValue:[[[self displayedObjects] objectAtIndex:i]
imagePath] forKey:imageVarName];
//release
[titleVarName release];
[dateVarName release];
[imageVarName release];
[self dismissModalViewControllerAnimated:YES];
}
分配对象并在 for 循环中释放它们不是可以的吗?
最佳答案
您需要使用 %d
或 %i
说明符而不是 %@
来指定整数。如果 %@
与 int 一起使用,那么它将尝试访问 int 指定地址处的对象。例如,如果 i
的值为 1,则它试图访问地址 1 的对象,这将导致错误访问。
NSString *titleVarName = [[NSString alloc] initWithFormat:@"%@%d",@"occasionTitle",i];
而且你在这里不需要 alloc
和 release
,尽管这不是访问错误的原因。您可以使用方便的构造函数。
NSString *titleVarName = [NSString stringWithFormat:@"occasionTitle%d", i];
// release not required
对 dateVarName
和 imageVarName
也做同样的事情。
关于objective-c - EXC_BAD_ACESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7574124/