Я хочу сохранить Content
из ABRecordRef
в моем собственном Приложении независимо от записи в AdressBook
.После кросс-чтения через stackoverflow и сайт разработчиков 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?