【问题标题】:How to unarchive unknown objects?如何解压未知对象?
【发布时间】:2014-08-19 09:05:58
【问题描述】:

我基于 2 个对象类(classAclassB)为 iPad 创建了两个应用程序。

我在带有NSKeyedArchiver 的文件中序列化了classA(然后附加到电子邮件中)。 我想在使用classB 的其他应用程序中取消归档classA 对象,而不包括其他应用程序的所有标头。

问题: 当我使用 NSKeyedUnarchiver 从 iPad 文件系统(从邮件附件)加载对象时,该函数返回错误(“类无法识别”)。

我尝试过的: 这些子弹都不适合我.... a) 检查类类型(作为字符串)并转换 objectA。 b) 在其他应用程序中包含 objectA 的 .h 定义。

问题: 有没有办法将对象取消归档到通用 ID 对象中? 然后设置参数调用例如:

[genericObjectA setName:@"new name"];
[genericObjectA execute];

鉴于我知道函数的名称和要设置的参数的名称?

【问题讨论】:

  • 不需要标题中的标签 ;-)
  • 你能发布你用来归档和取消归档对象的函数吗?

标签: objective-c ipad ios7 nskeyedunarchiver


【解决方案1】:

使用KVO,可以设置值:

[genericObjectA setValue:@"new name" forKey:@"name"];

然后调用一个方法,使用它的选择器:

SEL newSelector = NSSelectorFromString(@"execute");
if ([genericObjectA respondsToSelector:newSelector])
    [genericObjectA performSelector:@selector(newSelector)];

【讨论】:

  • 问题是:我第一次使用 NSKeyedUnarchiver 从文件中加载对象时,函数返回错误“对象类无法识别”......
  • 您是否为您的对象实现了NSCoding 协议? sam.roon.io/archiving-objective-c-objects-with-nscoding
  • 是的,两者都实现了协议。它们在每个应用程序中都可以正常工作...当我尝试加载解决方案中未描述的对象时它们无法正常工作...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多