2013-07-30 67 views
0

我正在嘗試創建一個遊戲,其中的人們回答問題。我正在從文本文件加載問題。不同部分之間用?和問題分開。分離的代碼工作正常,除了當我試圖用它創建一個問題。拆分NSString後獲取EXC_BAD_ACCESS

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)崩潰。如果我將事實,提示,圖像等替換爲「你好」或@「再見」,它可以正常工作。

我正在使用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文件中有硬編碼的答案和答案。我在測試。

+0

請在'YNQuestion'中發佈實例變量/屬性的頭部定義。你還使用ARC還是手動引用計數? –

+0

@JasonHarwig我剛剛做到了。 – joeelectricity

回答

2

您需要保留對傳遞給初始值設定項的字符串的強引用。將NSString屬性設置爲強而不是分配,它將停止崩潰。

+0

謝謝,我想你只是讓我的一天。 – joeelectricity

1

您正在訪問可能不存在於數組中的索引。嘗試記錄數組的count,以查看陣列中有多少條目。

此外,設置全異常斷點來查看應用程序崩潰的位置。或者您可以在加載數組後立即設置斷點,以查看其內容。

+0

我已經這樣做了,它會打印出正確的答案或事實。它只是不喜歡被加載到問題中。字符串是正確的。也許我需要讓它們保持不變? – joeelectricity

+0

然後,在加載問題之前,那些'NSSTring'的值是什麼? –

+0

根據NSLog,他們是(按順序)'事件提示unknown.png NO' – joeelectricity