【问题标题】:Archiving NSArray that contains dictionaries归档包含字典的 NSArray
【发布时间】:2013-05-19 04:21:50
【问题描述】:

我正在尝试将NSMutableArray 保存在CoreData 中。数组包含对象NSDictionary

NSDictionary 具有以下结构

valueDict = 
{
    FloorId = F0001;
    endCoordinates = "NSPoint: {541, 413}";
    linePath = "<UIBezierPath: 0x1d0903c0>";
    pointsOnLine =     (
    );
    startCoordinates = "NSPoint: {418, 504}";
},

要写入核心数据,我使用以下代码:parray is type BinaryData

points.parray = [NSKeyedArchiver archivedDataWithRootObject:self.locationsArray];

并检索我使用的值

locationsArray = [NSKeyedUnarchiver unarchiveObjectWithData:points.parray];

当我尝试检索它时,我收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSDictionary initWithObjects:forKeys:]: count of objects (0) differs from count of keys (5)'

我检查了 NSArray 和 NSDictionary 采用 NSCoding 协议。我在这里做错了什么?

【问题讨论】:

  • FloorId 是什么类型?
  • floorId 是一个 NSString
  • “points”是 NSManagedObject 的子类吗? “parray”是指向 NSData 的指针吗?
  • 从异常中我猜你创建字典的方式是错误的。你能说明你是如何初始化字典的吗?

标签: ios core-data nscoding object-graph


【解决方案1】:

解决此问题的最佳方法是创建一个小型测试应用,或者在应用启动时调用一个测试方法。使用相同的键和类型创建一个典型的字典,尝试归档它,记录数据大小,然后立即尝试取消归档数据。假设它无法注释掉一个或多个键,直到剩下的工作正常。现在您知道了问题的关键,并且可以更好地确定问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多