Objective C - 将 EAAccessory 存储到 NSUserDefaults
Posted
技术标签:
【中文标题】Objective C - 将 EAAccessory 存储到 NSUserDefaults【英文标题】:Objective C - Store EAAccessory to NSUserDefaults 【发布时间】:2012-07-05 15:26:42 【问题描述】:在我必须制作的项目中, 我正在使用外部附件和框架 ExternalAccessory。
(我可以连接到唯一一个配件)。
连接很简单,发送数据并不难。
我想做的一件事是将最后连接的设备存储在内存中,以在应用程序重新启动时尝试自动重新连接。 (离开之后,所以在第一次发射之后。)
所以,我的问题是 EAAccessory 是一个自定义类对象,不能存储到 NSUserDefaults 中。
我看到了这个问题来存储自定义对象:
How to store custom objects in NSUserDefaults
所以我会用它创建一个 NSData,但没有成功,因为 EAAccessory 没有实现 encodeWithCoder 和 initWithCoder 方法...
有什么想法吗?用这种方式还是另一种方式处理?
【问题讨论】:
【参考方案1】:您应该在逻辑上/以有意义的方式将 EAAcessory 实例的所有重要和持久属性存储在 NSDictionary 中,并将此字典存储在 NSUserDefaults 中。然后你必须读回这个字典并执行逆转换(分配初始化 EAAccessory 实例,设置它的属性等)
【讨论】:
当然,但我想我可以让事情变得更简单:) 并非如此。这就是这个逻辑的运作方式。你认为各种类的 encodeWithCoder: 等实现是如何编码的? ;) 是的,这就是我喜欢这些简化生活的类或方法的原因 :) 我是一名开发人员,所以我不想编写太多代码...... ;)【参考方案2】:我认为您可以将缺少的方法实现到自定义 EAAccessory 类别中。 也许是这样的:
*** 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;
【讨论】:
好的,我尝试过这样的事情,但是在 init 函数中,我会从一个 : self = [super init] if (self) ... 开始并得到错误,因为 EAAccessory 确实没有父类。我会再试一次! 嗯,再试一次,这个解决方案不起作用,因为 EAAccessory 属性是只读的。所以我不能做一个 self.name = ...以上是关于Objective C - 将 EAAccessory 存储到 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章
Objective C将数据发送到phonegap并调用javascript函数