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函数

将Swift类导入Objective c [复制]

将方法从 Objective C 转换为 Swift

将按钮禁用为灰色-Objective C

Objective C 将 int 转换为 NSString (iPhone)

Objective c 将图像保存到图库