我希望将Content
ABRecordRef
存储在我自己的应用程序中,而不依赖于AdressBook
中的条目。通过stackoverflow和苹果开发者网站交叉阅读后,我发现这是最好的方式:
如果做得对,则需要NSCoding
符合NSObject
子类,所有值均为ABRecordRef
且至少包含函数initWithABRecordRef
和getABRecordRefFromPeopleData
(假设一个人命名为他的类peopleData),其中initWithABRecordRef
将ABRecordRef
(如果不为空)的所有值填充到自己类的实例中,getABRecordRefFromPeopleData
返回ABRecordRef
opaque类型,数据存储在自己类的实例中。
我的问题:
我想知道是否有人已经那样做了,因为我可以想象,其他人之前也遇到了同样的问题。如果是这样的话,那么参加那个课程就会很有趣,如果不是的话,我会自己尝试一下,如果需要,可以在这里加载结果。 也许你甚至知道更好的方法吗?
如果您确实实施了解决方案,请分享。如果你需要同样的东西,我会很高兴能一起工作。
修改
我现在开始研究这个问题并且(正如我所料)我遇到了一些不明确的问题。
至于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
电子邮件列表并继续这样:
- (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;
}
现在我不是shure,如何在多值上完成其余的任务。我可以像对待字符串一样对NSMutableArray进行编码和解码,还是必须为emailList
中的所有电子邮件设置密钥?
我如何将该死的东西带回returnRecord?
答案 0 :(得分: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