NSCoding - 重用对象写作?

时间:2012-03-29 20:01:57

标签: iphone objective-c

我有一个Singleton,它有一个包含Class的NSMutableArray,Class包含正确的NSCoding例程来编码/解码数据 - 它一切正常。

但是我现在也希望保存不属于Class(数组)的数据,而是Singleton的一部分,并不是特定于Class / array中的每个项目。所以我在Singleton中添加了相应的代码,包括:

    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];

现在我想添加以下内容以包含Singleton中的其他数据:

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'

我做错了什么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

你的错误就是这样     globDat.alarmIsOn 是一个布尔和

NSKeyedArchiver archivedDataWithRootObject:

想要一个

id

这是指向对象的不透明指针的另一个词。布尔只是一个字节。你究竟想要修复它取决于你。要使用该例程,需要一个对象。