【问题标题】:Bad Access when loading NSArray in init在 init 中加载 NSArray 时访问错误
【发布时间】:2012-06-10 12:10:47
【问题描述】:

我有一个班级,名为Letter。在 Letter 的 init 方法中,我试图加载一个字符串数组,以便该类的其他方法可以使用它们。

然后我将基于Letter 类实例化一个对象。我期待 init 调用来加载数组,但我收到了 EXC_BAD_ACCESS 错误。

字母.h

@interface Letter : NSObject
{
    NSArray *consonants;
}

-(BOOL)typeOfLetter:(NSString *)_letter; 

字母.m

#import "Letter.h"

@implementation Letter

- (id)init {
    self = [super init];
    if (self) {
        consonants = [NSArray arrayWithObjects:@"B",@"C",@"D",@"F",@"G",@"Ğ",@"H",@"J",@"K",@"L",@"M",@"N",@"P",@"R",@"S",@"Ş",@"T","@U",@"V",@"Y",@"Z",@"b",@"c",@"d",@"f",@"g",@"ğ",@"h",@"j",@"k",@"l",@"m",@"n",@"p",@"r",@"s",@"ş",@"t",@"u",@"v",@"z",nil];        
    }
    return self;
}

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    BOOL retValue;

    Letter *letter = [[Letter alloc] init];
    retValue = [letter typeOfLetter:@"a"];

}

我在这里做错了什么?

【问题讨论】:

  • 您在使用 ARC 吗?它会在这里“[[Letter alloc] init]”崩溃吗?
  • 如果他使用 ARC,它会抛出一个正确的 NSException 而不是简单的段错误。
  • 我以为我在创建项目时选择了 ARC。编译器是 Apple LLVM Compiler 3.1。这使它成为 ARC,不是吗?

标签: ios nsarray init


【解决方案1】:

您忘记在其中一个字符串之前添加@ 在您的数组中,您有这个字符"@U",您必须将其更改为@"U"

【讨论】:

  • 太棒了!谢了哥们。下次我得仔细看看那些长长的字符串列表,
  • 谢谢伙计!就是这样。以后我将不得不更仔细地查看那些长长的字符串列表。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多