分割NSString后获取EXC_BAD_ACCESS

时间:2013-07-30 21:08:57

标签: objective-c

我正在尝试创建一个人们回答问题的游戏。我正在从文本文件中加载问题。不同的部分用•和§分开。除了当我尝试用它创建问题时,分离代码工作正常。

for(int n = 0; n<[questionsFromFile count]; n++)
{
    NSArray *params = [((NSString *)questionsFromFile[n]) componentsSeparatedByString:@"•"];

    NSString *fact = params[0];
    NSString *prompt = params[1];
    NSString *image = params[2];
    NSString *answerAsString = params[3];

    BOOL answer = [answerAsString boolValue];
    YNQuestion *question = [[YNQuestion alloc]initWithFact:fact prompt:prompt image:image answer:answer];
    [self.allQuestions addObject:question];
}

在questions.txt中:

fact•prompt•unknown.png•YES
§fact•prompt•unknown.png•NO

当我运行它时,它可以正常工作,直到加载一个问题。然后,它与EXC_BAD_ACCESS(code=2)崩溃。如果我将事实,提示,图像等等于@“hello”或@“goodbye”,它就可以正常工作。

我正在使用ARC。此外,这是YNQuestion的代码。

@interface YNQuestion : NSObject
@property(assign, nonatomic)NSString *fact;
@property(assign, nonatomic)NSString *prompt;
@property(assign, nonatomic)NSString *image;
@property(assign, nonatomic)BOOL answer;
-(id)initWithFact:(NSString *)fact prompt:(NSString *)prompt image:(NSString *)image answer: (BOOL) answer;
-(BOOL)checkIfCorrect: (BOOL)answer;
@end

现在,它有效。只有那些不是我的默认值。

惊喜!它不再起作用。我相信错误是在.txt文件中有硬编码的答案和答案。我正在测试。

2 个答案:

答案 0 :(得分:2)

您需要对传递给初始值设定项的字符串保留强引用。将NSString属性设置为strong而不是assign,它将停止崩溃。

答案 1 :(得分:1)

您正在访问可能不存在于数组中的索引。尝试记录数组的count,以查看数组中有多少条目。

此外,设置所有异常断点以查看应用程序崩溃的确切位置。或者,您可以在加载数组后立即设置断点,以查看其内容。