1

ABRecordRefを使用したNSMutableArrayがあります

ディスクに保存したいのですが、同僚からシリアル化するように言われました。彼が何について話しているのか分かりませんか?

私はウェブをサーフィンして、たくさんの「解決策」を見てきましたが、それがどのように機能するのか、なぜそれが必要なのかわかりません

4

1 に答える 1

2

ABRecordは、対応するフリーダイヤルのブリッジされたObjective-cクラスのない不透明なCoreFoundationクラスです。それが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値が返される可能性があることに注意してください。

于 2012-05-03T07:12:33.337 に答える