2012-03-29 6 views
1

私はNSMutableArrayクラスを含むシングルトンを持って、クラスは、データをエンコード/デコードするための適切なNSCodingルーチンを含んでいます - それはすべて正常に動作します。NSCoding - 書き込みオブジェクトを再利用しますか?

しかし、クラス(配列)の一部ではなく、代わりにシングルトンの一部であり、クラス/配列の各項目に固有のデータも保存したいと思います。

BOOL   alarmIsOn; 
    ... 
    @property(nonatomic,assign) BOOL   alarmIsOn; 
    ... 
    @synthesize alarmIsOn; 
    ... 
    [encoder encodeBool:alarmIsOn forKey:@"alarmison"]; 
    ... 
    alarmIsOn=[decoder decodeBoolForKey:@"alarmison"]; 

私は私のデータを保存すると、私は以前に完璧に動作しているこの使用:今、私は、次を追加したい

GlobalData *globDat=[GlobalData getSingleton]; 
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:globDat.allMsgs]; 
[encodedObject writeToFile:plistPath atomically:YES]; 

をだから私は、以下を含むシングルトンで適切なコードを追加しましたそれはXcodeで私にこのエラーが発生しますが

encodedObject = [NSKeyedArchiver archivedDataWithRootObject:globDat.alarmIsOn]; 
[encodedObject writeToFile:plistPath atomically:YES]; 

をシングルトンからの追加データを含めます

そして、この警告:

Semantic Issue: Incompatible integer to pointer conversion sending 'BOOL' (aka 'signed char') to parameter of type 'id' 

は私が間違って何をやっているし、どのように私はこの問題を解決することができますか?

+0

私はこれを完全に解決しました - DRVicはBOOLに関しては正しいです(下記参照)。そしてallMsgs配列と単一のオブジェクトをNSDictionaryに入れて、NSDictionaryをplistに保存します。誰かが望むなら、私は最終的なコードを投稿することができます。 – wayneh

答えて

3

あなたのエラーが globDat.alarmIsOn はブール値と

NSKeyedArchiver archivedDataWithRootObject: 

であるオブジェクトへの不透明なポインタのための別の言葉である

id 

を望んでいるということです。 boolは単なるバイトです。正確にそれを修正したいのはあなた次第です。そのルーチンを使用するにはオブジェクトが必要です。

+1

あなたは[NSNumber numberWithBool:(BOOL)] –

+0

@DRVicすることができますので、boolがクラスの一部でNSMutableArrayに追加されたときにこれは問題にはなりませんが、それは "単独"のとき問題ですか?また、私の残りの構造は大丈夫ですか? – wayneh

+0

@AdamShiemkeだから私はこれをすることができましたか? 'encodedObject = [NSKeyedArchiver archivedDataWithRootObject:[NSNumber numberWithBool:(globDat.isAlarm)]];' – wayneh

関連する問題