首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C- Store EAAccessory to NSUserDefaults

目标C- Store EAAccessory to NSUserDefaults
EN

Stack Overflow用户
提问于 2012-07-05 15:26:42
回答 2查看 446关注 0票数 1

在我必须做的一个项目中,我正在使用外部附件和框架ExternalAccessory。

(我可以连接到一个,也是唯一一个附件)。

连接很简单,发送数据并不是很困难。

我想做的一件事是将最后连接的设备存储在内存中,尝试在应用程序重新启动时自动重新连接到它。(离开后,所以在第一次发射之后。)

因此,我的问题是,EAAccessory是一个自定义类对象,不能存储到NSUserDefaults中。

我看到了这个问题来存储自定义对象:

How to store custom objects in NSUserDefaults

所以我会用它创建一个NSData,但是没有成功,因为EAAccessory没有实现encodeWithCoder和initWithCoder方法.

知道吗?用这种方式还是另一种方式来处理?

EN

回答 2

Stack Overflow用户

发布于 2012-07-05 15:39:42

您应该在逻辑上/以有意义的方式将EAAcessory实例的所有重要和持久属性存储在NSDictionary中,并将此字典存储在NSUserDefaults中。然后,您必须重读此字典并执行逆转换(指定输入EAAccessory实例、设置其属性等)。

票数 0
EN

Stack Overflow用户

发布于 2012-07-05 15:49:39

我认为您可以将缺失的方法实现为自定义的EAAccessory类别。也许是这样的:

代码语言:javascript
复制
*** interface
@interface EAAccessory (CodecAdditions)
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end

*** implementation 
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeInt:[self name] forKey:@"name"];
    [aCoder encodeInt:[self manufacturer] forKey:@"manufacturer"];
    ...
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self.name = [aDecoder decodeIntForKey:@"name"];
    self.manufacturer = [aDecoder decodeIntForKey:@"manufacturer";
    ...

    return self;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11347559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档