私はNSDataオブジェクトを持っています。NSStringとしてNSDataを渡して戻す方法は?
文字列に変換し、関数に渡してからNSDataオブジェクトに戻したいと思います。
どのように?
このメソッドを試しましたが、NSDataの値は元のものとは異なります。
ここに私のコード:私は元のNSDataに変換することができますどのよう
// a generic class
APClass *c = [[APClass alloc] init];
c.aNumber = 123;
c.aString = @"my string";
// my data obj
NSMutableData *data = [NSMutableData data];
// archiver to store class in nsdata
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[encoder encodeObject:[NSNumber numberWithInt:c.aNumber] forKey:@"aNum"];
[encoder encodeObject:c.aString forKey:@"aStr"];
[encoder finishEncoding];
[encoder release];
[c release];
NSLog(@"%@", data);
NSString *d = [NSString stringWithFormat:@"%@", data];
// ---
NSString *strFromData = [NSString stringWithFormat:@"%@", d];
NSData *dataNM = [strFromData dataUsingEncoding:NSUTF8StringEncoding];
// decoder to retrieve class from nsdata
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNM];
int number = [[decoder decodeObjectForKey:@"aNum"] intValue];
NSString *string = [decoder decodeObjectForKey:@"aStr"];
[decoder finishDecoding];
[decoder release];
NSLog(@"[Number: %d] -- [String: %@]", number, string);
?
データとデータのサイズが異なります。
2012-04-02 16:33:28.269 DataTest[18008:f803] -[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80
2012-04-02 16:33:28.270 DataTest[18008:f803] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80'
感謝: コンパイラはこのエラーを返して。
NSData文字列値の作成で 'data'は何も設定されていませんが、空のNSMutableDataです。 NSStringからのNSDataの取得では、NSStringとは何ですか?より一般的には何を達成しようとしていますか? – zaph
'[エンコーダfinishEncoding];'最初は空のデータ値を評価します。 'NSKeyedArchiver'を使って2つのアプリケーション間でクラス全体を渡す必要があります。はい、 'd'は前に作成された文字列です。 – elp
なぜ 'NSString'に変換するのですか、単にNSData'として渡すのはなぜですか? – zaph