2

Contentのエントリとは関係なく、のABRecordRefを自分のアプリケーションに保存したいAdressBook。stackoverflowとアップルデベロッパサイトをクロスリードした後、これが最良の方法であることがわかりました。

それが正しければ、すべての値と少なくとも関数と(自分のクラスにpeopleDataという名前を付けると仮定して)を含むNSCodingconformNSObjectサブクラスが必要になります。ここで、(nullでない場合)からのすべての値を独自のクラスのインスタンスに入力します。独自のクラスのインスタンスに格納されているデータを含む不透明(OPAQUE)型を返します。ABRecordRefinitWithABRecordRefgetABRecordRefFromPeopleDatainitWithABRecordRefABRecordRefgetABRecordRefFromPeopleDataABRecordRef

それに対する私の質問:

想像できるので、他の人が以前にまったく同じ問題に遭遇したので、誰かがすでにそれをしたのだろうか。もしそうなら、そのクラスを手に入れるのは恐ろしいことです。そうでなければ、私はそれを自分で試して、必要に応じてここに結果をロードするつもりです。多分あなたはそれをするより良い方法を知っていますか?

ソリューションを実装した場合は、それを共有してください。同じことが必要な場合は、一緒に解決していただければ幸いです。

編集:

私は今そのことに取り組み始めました、そして(私が予想したように)私はいくつかの不明確な問題に遭遇しました。価値観に関しては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ません。私は私にNSMutableArrayemailListを作成し、次のように続けました:

- (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に戻すことができますか?

4

1 に答える 1

0

libsqlite3.dylibを使用して、すべてのプロパティ用に生成されたフラットファイルにアクセスするSQLデータベースを作成することを検討してください。

sqlite3ライブラリを使用したiOSプロジェクトのサンプルは次のとおりです。

http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application

&連絡先の複数値プロパティのABAddressbookを使用してこれを行う方法の詳細:

http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html

于 2014-06-03T13:10:52.350 に答える