Yog*_*ics 8 objective-c nsuserdefaults ios8-extension watchkit
我有一个用户对象,我需要存储在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];
Run Code Online (Sandbox Code Playgroud)
上面的最后一行在主应用程序中执行测试解码工作正常.
从NSUserDefaults检索并在扩展目标中解码的代码如下.
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mygroup"];
NSData *archivedUser = [defaults objectForKey:@"SF User Acct1"];
if (archivedUser){
SFUserAccount *user = [NSKeyedUnarchiver unarchiveObjectWithData:archivedUser];
}
Run Code Online (Sandbox Code Playgroud)
在扩展代码中,我得到一个"'NSInvalidUnarchiveOperationException',原因:'*** - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象"
关于我应该从哪里开始寻找的任何建议?该应用程序编译良好,这使我相信所需的框架已包含在扩展目标中.
为了使您的WatchKit扩展能够解码SFUserAccount对象,它需要了解SFUserAccount类.要启用此功能,应将其添加到WatchKit Extension.