gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:32:26 25 4
gpt4 key购买 nike

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

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

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

//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 扩展中。

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

关于objective-c - NSInvalidUnarchiveOperationException 无法解码 Apple Watch 扩展中的对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com