1

私が作成しなければならないプロジェクトでは、外部アクセサリとフレームワーク ExternalAccessory を使用しています。

(接続できるアクセサリは 1 つだけです)。

接続は簡単で、データの送信はそれほど難しくありません。

私がやりたいことの 1 つは、最後に接続されたデバイスをメモリに保存し、アプリケーションの再起動時に自動的に再接続しようとすることです。(出発後なので、最初の打ち上げ後。)

したがって、私の問題は、EAAccessory がカスタム クラス オブジェクトであり、NSUserDefaults に格納できないことです。

カスタムオブジェクトを保存するためにこの質問を見ました:

カスタムオブジェクトを NSUserDefaults に保存する方法

EAAccessory は encodeWithCoder および initWithCoder メソッドを実装していないため、それを使用して NSData を作成しますが、成功しませんでした...

何か案が ?この方法または別の方法で処理するには?

4

2 に答える 2

0

EAAcessory インスタンスのすべての重要な永続プロパティを意味のある論理的/意味のある方法で NSDictionary に格納し、この辞書を NSUserDefaults に格納する必要があります。次に、このディクショナリを読み戻し、逆変換を実行する必要があります (EAAccessory インスタンスの割り当て初期化、そのプロパティの設定など)。

于 2012-07-05T15:39:42.307 に答える
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 に答える