1

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

(我只能连接一个附件)。

连接很容易,发送数据并不难。

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

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

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

如何在 NSUserDefaults 中存储自定义对象

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

任何想法 ?对于这种方式或另一种方式来处理?

4

2 回答 2

0

我认为您可以将缺少的方法实现到自定义 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;
}
于 2012-07-05T15:49:39.063 回答
0

您应该在逻辑上/以有意义的方式存储 EAAcessory 实例的所有重要和持久属性在 NSDictionary 中,并将此字典存储在 NSUserDefaults 中。然后你必须读回这个字典并执行逆转换(分配初始化 EAAccessory 实例,设置它的属性等)

于 2012-07-05T15:39:42.307 回答