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,到目前为止我有

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)在(包装器托管到本机)MonoTouch。 ObjCRuntime.Messaging:monotouch_IntPtr_objc_msgSend_IntPtr (intptr,intptr,intptr) 在 MonoTouch.Foundation.NSKeyedUnarchiver..ctor (MonoTouch.Foundation.NSData 数据) [0x00027] 在 /Developer/MonoTouch/Source/monotouch/src/Foundation/NSKeyedUnarchiver.g。 cs:88 堆栈跟踪:

从新的 NSKeyedUnarchiver(data) 行

有人可以建议 MonoTouch NSKeyedUnarchiver 的教程/示例吗?

两个人可以帮助解决这个错误吗?

最后,鉴于该项目是跨平台并在Android下工作(最终),这是最好的方式吗

提前致谢

4

1 回答 1

1

问题可能与您创建初始 NSData 的方式有关。

就是 NSData.FromString 所做的,这看起来不像您在 Objetive-C 中所做的。

如果您在 C# 中有可用的指针,请尝试NSData.FromBytes改用。

于 2013-04-13T03:21:23.577 回答