1

在一个项目中,我必须做出, 我与外部附件的工作,并且框架ExternalAccessory。目标C - 存储EAAccessory NSUserDefaults的到

(我可以连接到一个且只有一个附件)。

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

有一件事我想要做的是存储在内存中的最后一个连接的设备,来尝试自动重新连接到它时,应用程序重新开张。 (后离开,所以先推出后)。

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

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

How to store custom objects in NSUserDefaults

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

有什么想法?以这种方式或另一种方式来处理?

回答

0

您应该存储在逻辑上/中有意义的一个NSDictionary的EAAcessory实例的所有重要和persisten性质一种有意义的方式和存储这个字典NSUserDefaults的中。然后你将不得不回读这个字典并执行反转换(alloc-initting EAAccessory实例,设置它的属性等)。

+0

知道,但我想我可以做的东西更容易:) – 2012-07-06 09:17:10

+0

不是真的。这就是这种逻辑的工作原理。你如何看待各种类的encodeWithCoder:等实现已被编码? ;) – 2012-07-06 09:48:22

+0

是啊,这就是为什么我喜欢这些类或简化我的生活:) 我是一个开发者的方法,所以我不想编写太多...;) – 2012-07-06 12:28:57

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; 
} 
+0

好吧,我想这样的事情,但在初始化函数,我会用一个开始: 自= [超级初始化] 如果(个体经营){ ... } ,并获得和错误,因为EAAccessory没有一个父类。 我会再试一次! – 2012-07-06 09:15:50

+0

Hummmm经过另一次尝试,此解决方案不起作用,因为EAAccessory属性是只读的。 所以我不能让self.name = ... – 2012-07-06 09:20:36

相关问题