首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建NSObject以保存本地ABRecordRef数据

构建NSObject以保存本地ABRecordRef数据
EN

Stack Overflow用户
提问于 2011-08-22 16:55:00
回答 1查看 1.4K关注 0票数 2

我希望将ABRecordRefABRecordRef存储在自己的应用程序中,而不依赖于AdressBook中的条目。在遍历了堆栈溢出和苹果开发者站点之后,我发现这是最好的方法:

如果正确的话,您将需要一个NSCoding一致性NSObject子类与ABRecordRef的所有值,至少函数initWithABRecordRefgetABRecordRefFromPeopleData (假设一个人命名为类peopleData),initWithABRecordRef将把来自ABRecordRef的所有值(如果不是null)填充到自己类的实例中,getABRecordRefFromPeopleData将返回一个ABRecordRef不透明类型,其中存储在自己类的实例中的数据。

我的问题是:

我想知道是否有人已经这样做了,因为我可以想象,其他人之前也遇到了同样的问题。如果是这样的话,掌握这个类会很麻烦,如果不是的话,我会自己试一试,如果需要的话,我会把结果加载到这里。也许你知道更好的方法?

如果您确实实现了一个解决方案,请共享它。如果你也需要的话,我很乐意和你一起工作。

编辑:

我现在开始做这件事,(正如我所预料的)我遇到了一些不清楚的问题。当谈到kABStringPropertyType值时,我的概念是非常直接的。小例子:

代码语言:javascript
复制
@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.I做同样的事情,让我成为了一个NSMutableArray emailList,然后继续这样说:

代码语言:javascript
复制
- (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呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 13:10:52

查看使用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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7150812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档