Content
のエントリとは関係なく、のABRecordRef
を自分のアプリケーションに保存したいAdressBook
。stackoverflowとアップルデベロッパサイトをクロスリードした後、これが最良の方法であることがわかりました。
それが正しければ、すべての値と少なくとも関数と(自分のクラスにpeopleDataという名前を付けると仮定して)を含むNSCoding
conformNSObject
サブクラスが必要になります。ここで、(nullでない場合)からのすべての値を独自のクラスのインスタンスに入力します。独自のクラスのインスタンスに格納されているデータを含む不透明(OPAQUE)型を返します。ABRecordRef
initWithABRecordRef
getABRecordRefFromPeopleData
initWithABRecordRef
ABRecordRef
getABRecordRefFromPeopleData
ABRecordRef
それに対する私の質問:
想像できるので、他の人が以前にまったく同じ問題に遭遇したので、誰かがすでにそれをしたのだろうか。もしそうなら、そのクラスを手に入れるのは恐ろしいことです。そうでなければ、私はそれを自分で試して、必要に応じてここに結果をロードするつもりです。多分あなたはそれをするより良い方法を知っていますか?
ソリューションを実装した場合は、それを共有してください。同じことが必要な場合は、一緒に解決していただければ幸いです。
編集:
私は今そのことに取り組み始めました、そして(私が予想したように)私はいくつかの不明確な問題に遭遇しました。価値観に関してはkABStringPropertyType
、私のコンセプトは非常に単純です。小さな例:
@implementation RealRecord
@synthesize firstName; //NSString
- (id)initWithRecordRef:(ABRecordRef)record{
//Single valued entrys
NSString *contactName = (NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty);
firstName=contactName;
[contactName release];
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder{
//single value entrys
self.firstName= [aDecoder decodeObjectForKey:@"firstName"];
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:firstName forKey:@"firstName"];
}
- (ABRecordRef)returnABRecordRefFromRealRecord{
ABRecordRef returnRecord =ABPersonCreate();
ABRecordSetValue(returnRecord, kABPersonFirstNameProperty, firstName, NULL);
return returnRecord;
}
これは正常に機能します。今、私は同じことをどのように行うかについてあまり明確ではありkABMultiStringPropertyType
ません。私は私にNSMutableArray
emailListを作成し、次のように続けました:
- (id)initWithRecordRef:(ABRecordRef)record{
//Multi valued entrys
ABMutableMultiValueRef email=ABRecordCopyValue(record, kABPersonEmailProperty);
for (int i = 0; i < ABMultiValueGetCount(email); i++) {
NSString *anEmail = [(NSString*)ABMultiValueCopyValueAtIndex(email, i) autorelease];
[emailList addObject:anEmail];
}
return self;
}
マルチバリューで残りのタスクを実行する方法はわかりません。文字列で行ったようにNSMutableArrayをエンコードしてデコードすることはできますか、それともすべての電子メールにキーを設定する必要がありemailList
ますか?
そして、どうすればいまいましいものをreturnRecordに戻すことができますか?