Сборка NSObject для сохранения локальных данных ABRecordRef

Я хочу хранить Content из ABRecordRef в моем собственном приложении независимо от записи в AdressBook, После кросс-чтения через stackru и сайт разработчиков Apple, я обнаружил, что это лучший способ:

Если бы это правильно, нужно NSCoding соответствовать NSObject подкласс со всеми значениями ABRecordRef и хотя бы функции initWithABRecordRef а также getABRecordRefFromPeopleData (если предположить, что его класс называет peopleData), где 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?

1 ответ

Решение

Изучите использование libsqlite3.dylib и создайте базу данных sql, которая будет обращаться к плоским файлам, созданным для всех свойств.

Пример iOS проекта с библиотекой sqlite3 находится здесь:

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

Другие вопросы по тегам