在運行這樣的代碼:NSData的長度碰撞
[__NSCFArray length]: unrecognized selector sent to instance 0x2398a0 2012-03-13 20:25:33.088[7301:707] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray length]: unrecognized selector sent to instance 0x2398a0' * First throw call stack: (0x34dbc88f 0x361e3259 0x34dbfa9b 0x34dbe915 0x34d19650 0xccb1b 0x31e13e33 0x31e38629 0x31dfcd7d 0x31ebf4dd 0x31e0555d 0x31e05579 0x31e0540b 0x31e053e7 0xcfedf 0x31e12e53 0x31e0c985 0x31ddac6b 0x31dda70f 0x31dda0e3 0x3600f22b 0x34d90523 0x34d904c5 0x34d8f313 0x34d124a5 0x34d1236d 0x31e0ba13 0x31e08e7d 0xcfd39 0xcbe28) terminate called throwing an exception
這並未」:連接在設備上運行,只有當
NSData *archivedSavedData = [[NSData alloc] init];
archivedSavedData = [defaults objectForKey:@"listOfAccessNumbers"];
NSLog(@"archivedSavedData length is %d", [archivedSavedData length]);
我正在此崩潰錯誤(最後一行)在模擬器上運行或直接在具有分佈配置文件的設備上運行(例如通過測試飛行)。
有沒有人知道只有在這種情況下才會發生這種行爲?
謝謝。
UPDATE:試圖以取代計長,當我得到這個複雜的錯誤:「對‘NSData的’不可見@interface聲明選擇‘計數’」
UPDATE2:據我瞭解,它應該是一個NSArray而比NSData,但我的問題是,我沒有存儲歸檔的NSData導致我的數組包含自定義對象,所以我必須在NSUserDefault中保存時將此數據歸檔爲NSData格式。否則我該怎麼辦?
那我如何存儲數據:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
[defaults setObject:data forKey:@"listOfAccessNumbers"];
陣列的形式的自定義對象的數組:
@interface NumberDataObj : NSObject {
NSString *inputName;
NSString *inputNum;
}
1.是的,ARC已啓用,2.我可以在一行中做到這一點,但我仍然需要聲明它......不是嗎? – TommyG 2012-03-14 00:41:24
問題是你顯然有聲明爲NSData的變量,但存儲在變量中的指針是NSArray。這可能只是一個「愚蠢」的錯誤 - 爲變量分配一個NSArray - 或者它可能是某種存儲管理問題(並且它們不會隨着ARC而消失,它們只是變得不同)。 – 2012-03-14 00:46:54
我們可能需要查看序列化對象的位置,以便深入瞭解這一點。 – FluffulousChimp 2012-03-14 00:50:03