繁体   English   中英

NSInvalidUnarchiveOperationException无法解码Apple Watch扩展中的对象错误

[英]NSInvalidUnarchiveOperationException cannot decode object error in Apple Watch extension

我有一个用户对象,我需要存储在NSUserDefaults中并与iOS 8扩展应用程序(Watchkit)共享。 在主容器应用程序中,我可以毫无问题地对对象进行编码和解码。 但是,当我尝试在Extension中检索存储的用户对象时,我得到一个"'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class"错误。

据我所知,NSCoding已在对象中正确实现(我能够在'main'应用程序中对对象进行编码和解码)。

用于存储用户对象的“容器”应用中的代码。

//Store user data in NSUserDefaults
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mygroup"];

SFUserAccount *user = [SFUserAccountManager sharedInstance].currentUser;

NSData *userEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:user];
[defaults removeObjectForKey:@"SF User Acct1"]; //remove any old values
[defaults setObject:userEncodedObject forKey:@"SF User Acct1"];

[defaults synchronize];
SFUserAccount *decodedUser =  [NSKeyedUnarchiver unarchiveObjectWithData:userEncodedObject];

上面的最后一行在主应用程序中执行测试解码工作正常。

从NSUserDefaults检索并在扩展目标中解码的代码如下。

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mygroup"];
    NSData *archivedUser = [defaults objectForKey:@"SF User Acct1"];



    if (archivedUser){
        SFUserAccount *user =  [NSKeyedUnarchiver unarchiveObjectWithData:archivedUser];
    }

在扩展代码中,我得到一个“'NSInvalidUnarchiveOperationException',原因:'*** - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象”

关于我应该从哪里开始寻找的任何建议? 该应用程序编译良好,这使我相信所需的框架已包含在扩展目标中。

为了使您的WatchKit扩展能够解码SFUserAccount对象,它需要了解SFUserAccount类。 要启用此功能,应将其添加到WatchKit Extension。

  1. 单击项目导航器中的项目名称,位于Xcode左侧列的顶部。 (如果隐藏了项目导航器,请按Cmd-1显示。
  2. 单击以突出显示主窗口左侧“目标”下的WatchKit扩展名。 (注意:突出显示您的WatchKit 扩展 ,而不是WatchKit应用程序。
  3. 在顶部的项目中选择“构建阶段”。
  4. 在“编译源”旁边,使用显示三角形查看该部分是否尚未可见。
  5. 单击该部分底部的“+”以添加新源。
  6. 从列表中,选择您需要添加的类的.m文件(在本例中为SFUserAccount.m文件)。
  7. 点击“添加”。
  8. 建立并运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM