iphone - 电子名片阅读器不工作

标签 iphone objective-c ios vcf-vcard

我是 Objective-C 的新手,我正处于迫切需要创建应用程序的位置。我正在使用 XCode 4.2

在应用程序的一部分中,我将检测二维码并获取 NSString 格式的 VCard: 我使用以下代码完成了该功能: -我将以下内容导入框架:

AddressBookUI.framework
AddressBook.framework

在我写的.h文件中:

#import <addressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

@interface HellowWorld : UIViewController<ABPeoplePickerNavigationControllerDelegate>{

}

-(IBAction)saveContacts;
@end

在我写的.m文件中:

-(IBAction)saveContacts{
    NSString *vCardString = test //where the data will be comming from
    CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];  ABAddressBookRef book = ABAddressBookCreate(); 
    ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book); 
    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData); 
    for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {     
        ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);     
        ABAddressBookAddRecord(book, person, NULL);     
        CFRelease(person); 
    }  
    CFRelease(vCardPeople); 
    CFRelease(defaultSource); 
    ABAddressBookSave(book, NULL); 
    CFRelease(book); 
}

我使用了这段代码,但它不起作用。

首先它没有编译这一行:

CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding]; 

我不得不把它改成这样:

CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];

编译后在这一行崩溃:

 for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {

它给出以下绿色错误:Thread1: Program Received Signal "EXC_BAD_ACCESS"。 有什么原因吗?

这也是在地址簿中保存 VCard(NSString 格式)的唯一方法吗?还有其他建议吗?

最佳答案

我假设您启用了 ARC。

CFRetain在您使用 vCardData 对象时是否会阻止崩溃?数据对象可能只存在到范围结束。

或者可能更好,使用 __bridge_retained

参见 release notes on ARC

关于iphone - 电子名片阅读器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155171/

相关文章:

iphone - 什么是 CALayer?

iphone - 在iphone的facebook中显示权限页面

iphone - UIWebView 作为 UITableViewCell 的一部分 : leading to crash because of a thread lock

ios - XCode - 删除核心数据中的相关对象

ios - 我从哪里获得 iPhone SDK

ios - Firebase 未配置 iOS

iphone - iOS,按下 "back"按钮时停止运行功能

objective-c - 在不同的NSWindow中的NSOpenGLView上绘制不同的形状

iphone - valueForKey 只返回内存地址而不返回实际值

ios - 使用 iOS 8 自定义键盘发送图像?