标签: abrecordref

从Unmanaged <AnyObject>获取swift类型的值.例如:ABRecordRef

如何从类型对象获取Swift类型的值Unmanaged<AnyObject>.我的例子是使用ABRecordRef

我创建了一个联系对象来管理ABRecordRef,但是我在从ObjC翻译时遇到了麻烦.这就是我所拥有的:

init(recordRef: ABRecordRef) {
    if let firstName = ABRecordCopyValue(recordRef, kABPersonFirstNameProperty) {
        self.firstName = firstName

    }
}
Run Code Online (Sandbox Code Playgroud)

如果是ObjC,我会这样做:

CFTypeRef firstNameRef = ABRecordCopyValue(recordRef, kABPersonFirstNameProperty);
if (firstNameRef) {
    self.firstName = (__bridge NSString *)firstNameRef;
}
Run Code Online (Sandbox Code Playgroud)

我似乎找不到正确的向下转换/转换组合,所以任何帮助都表示赞赏.

ios abrecordref swift

23
推荐指数
1
解决办法
8356
查看次数

将数据存储到NSUserDefaults

在我的iPhone应用程序中,我有一个名为的类Contact,它包含一个ABRecordRef用作特定联系人的引用.

我需要存储这些联系人的组NSUserDefaults,但由于Contact是自定义类,所以事情并没有很好.

在这种情况下该怎么做的任何想法?

iphone nsuserdefaults ipad ios abrecordref

11
推荐指数
1
解决办法
2万
查看次数

如何获取ABRecordRef的所有属性列表?

我想获得一个ABPersonRef和ABGroupRef的所有属性的列表,而不必使用kABPersonFirstNameProperty的iOS预定义键,kABPersonLastNameProperty ...我正在使用地址簿,我想迭代所有的值一个特定的人.我知道有预定义的键,但Apple将来可以很好地添加新键,所以我想做类似的事情:

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *allPeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
for (int i = 0; i < [allPeople count]; ++i) {
    ABRecordRef person = [allPeople objectAtIndex:i];

    // This is the line that I can't figure out.
    NSArray *allProperties = (NSArray *)ABRecordCopyArrayOfAllProperties(person);
}
Run Code Online (Sandbox Code Playgroud)

我知道我会遇到多个项目,我将不得不稍后循环,但目标是获取一个键列表,我可以迭代单值属性.我不在乎返回的类是什么,NSArray,NSDictionary ......无论如何.

我非常感谢任何建议!

iphone addressbook ios abrecordref

10
推荐指数
1
解决办法
6379
查看次数

从iOS中的ABRecordID加载ABRecordRef

我正在存储一个ABRecordID(实际上包裹在NSNumber中)的数组NSUserDefaults.到目前为止这么好,但现在我需要将其加载到ABRecordRef无法找到要使用的功能.

我只是在寻找从ABRecordID创建ABRecordRef的函数,就是这样.

abrecord ios abrecordref

8
推荐指数
1
解决办法
2512
查看次数

如何创建CFArrayRef

我正在尝试使用内置方法将一个iPhone联系人转换为vCard.文档说使用:

ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people)
Run Code Online (Sandbox Code Playgroud)

...但我的委托方法给了我这个:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person;
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何创建一个CFArrayRef只有一个ABRecordRef.

文档指出我让CFArrayCreate()我更加困惑.我不知道足够的C来自己解决这个问题.我在SO中读到NSArray了一个叫做免费桥接的东西,应该可以互换CFArrayRef但不太明白如何使用它,因为当我尝试交换它们时编译器抱怨.

ios abrecordref

7
推荐指数
1
解决办法
7662
查看次数

iPhone:地址簿有时会被删除

ABAddressBook在我的应用程序中使用.
对AB的访问来自单独的线程以释放UI.
我知道对AB实例的访问必须始终来自同一个线程,因此我构建了一个包装器.
包装器是一个单例,它维护自己的后台线程.
到包装器的所有消息都会自动重定向到后台线程,而调用线程会一直等到实现结束,最后用相关数据(联系人列表,特定联系人等)填充out参数.

尽管如此,设备上的地址簿有时会被清空(擦除).
每10-20次使用该应用程序后.

所以,我几乎没有问题:

  • 在专用线程中从AB获取ABRecordRef后,我是否必须在同一个线程中从ABRecordRef检索数据,还是可能是另一个线程?我还有一个ABRecordRef的包装器,所以当我从AB检索一个联系人时,我填充了人包装器对象,之后我从原始线程中使用它(从ABRecordRef读取).
  • 当我使用AB UI API(人员选择器导航控制器,新人视图控制器等)并将它们传递给我的ABAddressBook实例时,我不得不担心API不会在同一个线程中使用这个AB实例.创造了吗?我已经看到我可以传递NULL而不是AB实例,然后API将使用自己的AB,但是当我想修改联系人时我该怎么办?在这种情况下,我必须将它传递给ABRecordRef实例...
  • 还有其他我没想到的东西吗?

先感谢您.

-
迈克尔

multithreading abaddressbook ios abrecordref

6
推荐指数
1
解决办法
449
查看次数

将ABRecordRef存储在核心数据中

我想将ABRecordRef存储在核心数据的"客户端"实体中.

我在苹果文档中读到ABRecordRef是一种原始的C数据类型.据我所知,您只能在核心数据中插入对象.考虑到这一点,将其存储在核心数据中的最佳方法是什么?

我考虑将其转换为NSNumber进行存储,但不知道如何将其转换回ABRecordRef以供使用.

我还以为我可以把它放在一个NSArray/NSSet/NSDictionary中,它本身只是作为一个包装器,但不知道这是否愚蠢/低效/甚至可行.

思想赞赏.

非常感谢

core-data abrecordref

4
推荐指数
1
解决办法
1128
查看次数

如何在iOS中将NSNumber转换为ABRecordID

我开始用Objective-C学习编程,并且对C语言知之甚少.因此,iOS 6中的桥接构建对我来说仍然有点混乱.

这是场景:

我将一个人ABRecordID存储在CoreData中作为'NSNumber'属性.稍后,我想直接访问该人,因此我想使用该人的ABRecordID来使用ABAddressBook访问该联系人信息.注意到ABAddressBookGetPersonWithRecordID需要ABRecordID,下面是我在代码中执行转换的方法......

address_book = ABAddressBookCreate();
ABRecordID rec_id = (__bridge ABRecordID)person.record_id;
Run Code Online (Sandbox Code Playgroud)

然而,这没有成功,我得到了incompatible types casting 'int' into 'ABRecordID' (aka 'int') with a __bridge cast.

已经混淆了,在ARC类型和CF类型之间桥接转换的正确方法是什么?

另外,在哪种情况下我应该使用(__bridge retained)而不是(__bridge)

abaddressbook ios abrecordref

4
推荐指数
1
解决办法
2679
查看次数

多线程联系人同步

我正在尝试加快将设备上所有联系人的联系人同步到我的应用.此时它在同步联系人时阻塞主线程.

我在NSInvocationOperation中添加了单独的联系人设置,并将其添加到NSOperationQueue.

我知道你只能访问主线程中的UI.关于地址簿数据,您无法访问哪些内容?

multithreading contacts ios abrecordref

1
推荐指数
1
解决办法
430
查看次数