ABRecordRef的NSMutableArray。我该如何序列化?

时间:2012-05-03 01:36:58

标签: objective-c serialization nsmutablearray nsdictionary

我有一个带有ABRecordRef的NSMutableArray

我想将它保存到磁盘,我的同事告诉我序列化它。我不知道他在说什么?

我上网了,我看过很多“解决方案”,但我不明白它是如何运作的,或者为什么需要它?

1 个答案:

答案 0 :(得分:2)

ABRecord是一个不透明的Core Foundation类,没有相应的免费桥接objective-c类。如果它是Objective-C类,你可以像@Toro建议的那样使用NSCoder。

假设你的可变数组是ABPerson引用列表,你可以这样做:

NSMutableArray newArr = [NSMutableArray array];
for(id obj in mutableArray) {
    ABRecordRef ref = (ABRecordRef)obj;
    ABRecordID recordID = ABRecordGetRecordID(ref);
    NSValue* v = [NSValue value:recordID withObjCType:@encode(ABRecordID)];
    [newArr addObject:v];
}
// newArr is a list of NSValues holding ABRecordIDs, which can be serialized.

在反序列化时,从每个NSValue获取ABRecordID,然后在其上调用ABAddressBookGetPersonWithRecordID()以获取ABRecordRef。请记住,用户可能会删除该记录,因此,您可能会从此函数返回NULL值。