このコード実行中:NSDataの長クラッシュ
NSData *archivedSavedData = [[NSData alloc] init];
archivedSavedData = [defaults objectForKey:@"listOfAccessNumbers"];
NSLog(@"archivedSavedData length is %d", [archivedSavedData length]);
私はこのクラッシュエラー(最後の行)を取得しています接続されたデバイス上で実行されているのみ:これは「doesnの
[__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
をシミュレータ上で実行されているとき、または分布プロファイルを持つデバイス上で直接実行されている場合(testflightなど)
どのようにこのような現象がこの場合にのみ起こるか知っていますか?
ありがとうございました。
UPDATE:数と長さを交換しようとしたとき、私はこの合併症のエラーを取得:
アップデート2「『NSDataの』の目に見える@interfaceは、セレクタ 『回数』を宣言していない」:私はそれはかなりNSArrayのでなければならないことを理解します私の問題は、私の配列はカスタムオブジェクトで構成されているため、NSData形式に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.私はこれを1行で行うことができますが、まだ宣言する必要があります...いいえ? – TommyG
問題は明らかに変数がNSDataとして宣言されていますが、変数に格納されているポインタはNSArrayです。これはNSArrayを変数に代入する "ダム"の間違いかもしれません。あるいは、何らかのストレージ管理の問題かもしれません(ARCを使わないで、別のものに変わります)。 –
オブジェクトの最下位に到達するためには、オブジェクトをシリアル化する場所を確認する必要があります。 – FluffulousChimp