构建NSObject以将ABRecordRef数据保存在本地

时间:2011-08-22 16:55:01

标签: iphone ios nsobject abaddressbook abrecord

我希望将Content ABRecordRef存储在我自己的应用程序中,而不依赖于AdressBook中的条目。通过stackoverflow和苹果开发者网站交叉阅读后,我发现这是最好的方式:

如果做得对,则需要NSCoding符合NSObject子类,所有值均为ABRecordRef且至少包含函数initWithABRecordRefgetABRecordRefFromPeopleData(假设一个人命名为他的类peopleData),其中initWithABRecordRefABRecordRef(如果不为空)的所有值填充到自己类的实例中,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?

1 个答案:

答案 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