2012-03-29 50 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]; 

現在我想添加以下內容包括來自辛格爾頓附加數據:

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

但是它給了我這個錯誤在Xcode:

Automatic Reference Counting Issue: Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC 

而且這樣的警告:

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 2012-03-30 13:37:20

回答

3

你的錯誤是 globDat.alarmIsOn 是一個布爾和

NSKeyedArchiver archivedDataWithRootObject: 

想要的

id 

這是一個不透明的指針指向對象的另一個詞。一個bool只是一個字節。你要如何解決這個問題取決於你。要使用該例程需要一個對象。

+1

你可以[NSNumber numberWithBool:(BOOL)] – 2012-03-29 20:33:31

+0

@DRVic所以我明白,這是不是一個問題,當布爾是一個類的一部分,然後添加到NSMutableArray - 但是當它是「獨自」,這是一個問題?另外,我的結構的其餘部分是好的? – wayneh 2012-03-29 21:33:39

+0

@AdamShiemke所以我可以做到這一點? 'encodedObject = [NSKeyedArchiver archivedDataWithRootObject:[NSNumber numberWithBool:(globDat.isAlarm)]];' – wayneh 2012-03-29 21:40:04