0

Monotouch で NSKeyedUnarchiver のヘルプを探しています

SQLite blob フィールドで辞書項目の配列をストーリー化する

IOS コード

NSData     *data = [[NSData alloc] initWithBytes:ptr length:size];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableArray *myArray = [unarchiver decodeObjectForKey:@"pricing"];
[unarchiver finishDecoding];
NSMutableArray *MutData = [[NSMutableArray alloc] init];
for (NSDictionary *obj in myArray) {
     NSMutableDictionary *element = [[NSMutableDictionary alloc] initWithDictionary:obj];
     [MutData addObject:element];
}

これまでのところ、MonoTouchに変換しようとしています

モノタッチコード

NSData data = NSData.FromString(item.pricing);

NSKeyedUnarchiver unarchive =  new NSKeyedUnarchiver(data);
unarchive.DecodeObject();
unarchive.FinishDecoding();

NSMutableArray array = unarchive.GetNativeField("pricing") as NSMutableArray;
NSMutableArray mutArray = new NSMutableArray();

for (uint count=0; count < array.Count; count++)
{
    NSMutableDictionary mutDict = new NSMutableDictionary(array.ValueAt(count));
    mutArray.Add(mutDict);
}

実行時のプロデュースとエラー

未処理のマネージド例外: Objective-C 例外がスローされました。名前: NSInvalidArgumentException 理由: * -[NSKeyedUnarchiver initForReadingWithData:]: 理解できないアーカイブ (0x62、0x70、0x6c、0x69、0x73、0x74、0x30、0x30) (MonoTouch.Foundation.MonoTouchException) at (wrapper managed-to-native) MonoTouch. ObjCRuntime.Messaging:monotouch_IntPtr_objc_msgSend_IntPtr (intptr,intptr,intptr) at MonoTouch.Foundation.NSKeyedUnarchiver..ctor (MonoTouch.Foundation.NSData data) [0x00027] in /Developer/MonoTouch/Source/monotouch/src/Foundation/NSKeyedUnarchiver.g. cs:88 スタックトレース:

新しい NSKeyedUnarchiver(data) 行から

誰かが MonoTouch NSKeyedUnarchiver のチュートリアル/例を提案できますか?

2 誰かがこのエラーを解決できますか?

最後に、プロジェクトがクロスプラットフォームであり、Android で動作することを考えると、これが最善の方法ですか (最終的には)

前もって感謝します

4

1 に答える 1

1

問題は、最初の NSData の作成方法にある可能性があります。

これは NSData.FromString が行うことであり、Objetive-C で行っていることとはまったく異なります。

C# で使用できるポインターがある場合は、NSData.FromBytes代わりに使用してみてください。

于 2013-04-13T03:21:23.577 に答える