我是objective-c的新手,我決定從斯坦福大學CS193s 2010F Session的講座/作業開始。當使用appendString for NSMutableString時,應用程序崩潰
我正在處理第二個任務,當我不得不返回一個將NSMutableArray中的每個字符串結合(連接)的NSString時,我被卡住了。 (MutableArray只包含每個索引處的NSString)
我的方法是使用for循環來傳遞MutableArray的指示(在下面的代碼中,MutableArray是類型爲'id'的'anExpression')。我宣佈了一個NSMutableString,並在'anExpression'數組的每個索引處添加了NSString。下面是代碼:
+ (NSString *)descriptionOfExpression:(id)anExpression{
NSMutableString *result = [NSMutableString string];
for (int i = 0;i<[anExpression count];i++){
[result appendString:[anExpression objectAtIndex:i]];
}
return result;
}
然而,在
[result appendString:[anExpression objectAtIndex:i]];
的Xcode崩潰,並出現以下錯誤語句:
2012-07-17 01:44:51.014 Calculator[9470:f803] -[__NSCFNumber length]: unrecognized selector sent to instance 0x68732c0
2012-07-17 01:44:51.015 Calculator[9470:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x68732c0'
*** First throw call stack:
(0x13ca022 0x155bcd6 0x13cbcbd 0x1330ed0 0x1330cb2 0x12d2d18 0x13460d7 0x1397a8d 0x3a50 0x27ed 0x13cbe99 0x1714e 0x170e6 0xbdade 0xbdfa7 0xbd266 0x3c3c0 0x3c5e6 0x22dc4 0x16634 0x12b4ef5 0x139e195 0x1302ff2 0x13018da 0x1300d84 0x1300c9b 0x12b37d8 0x12b388a 0x14626 0x1ed2 0x1e45 0x1)
terminate called throwing an exception
我通過蘋果的開發者文檔望去,只見 '的NSString stringWithFormat:' 法,並決定使用此方法代替:
+ (NSString *)descriptionOfExpression:(id)anExpression{
NSMutableString *result = [NSMutableString string];
for (int i = 0;i<[anExpression count];i++){
[result appendString:[NSString stringWithFormat:@"%@",[anExpression objectAtIndex:i]]];
}
return result;
}
它現在有效。
現在我很困惑爲什麼第二個代碼有效,但第一個沒有。 我認爲追加字符串只有當它通過零時失敗(並崩潰)...
有什麼我失蹤了嗎?
預先感謝您:)
啊......非常感謝,ctrahey。我太粗心了!看來我的陣列也有NSNumber,不僅NSStrings。感謝ctrahey和Raj。對此,我真的非常感激 :) – aaa 2012-07-17 06:20:13