objective-c - EXC_BAD_ACESS 错误

标签 objective-c ios cocoa-touch exc-bad-access

我在以下行收到错误 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];

而且你在这里不需要 allocrelease,尽管这不是访问错误的原因。您可以使用方便的构造函数。

NSString *titleVarName = [NSString stringWithFormat:@"occasionTitle%d", i];
// release not required

dateVarNameimageVarName 也做同样的事情。

关于objective-c - EXC_BAD_ACESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7574124/

相关文章:

ios - react 性文本字段信号不会在删除时触发

objective-c - 如何使用适用于 IOS 的 Linea-Pro SDK?

ios - 从 ViewController 实例化一个 DrawRect View

ios - 拖放到 iOS 11 Beta 4 中的 `UICollectionView` 占位符

ios - 区域设置 - 确定数字是否采用小数格式

iphone - 自定义 iPhone 键盘

ios - 在导航 Controller 中设置后退按钮的 Action

sql - 单父实体的核心数据性能

objective-c - 在代码中存储和引用第三方 API key 和常量列表的最佳方式?

iphone - 如何将 NSManagedObjects 的 NSArray 转换为 NSData