iPhone通讯录问题

标签 iphone ios exc-bad-access abaddressbook

我在使用地址簿将联系人姓名从设备获取到我自己的应用程序中的联系人 View 时遇到了一些问题。

我的代码在模拟器上运行良好,但在 iPhone 4 上测试时它会崩溃,如果有两个或更少的联系人但有 3 个或更多联系人并且应用程序崩溃,应用程序似乎工作正常。

这是我用来将联系人姓名放入数组中的代码。

    ABAddressBookRef addressBook;
    bool wantToSaveChanges = YES;
    bool didSave;
    CFErrorRef error = NULL;

    addressBook = ABAddressBookCreate();

    listOfContacts = [[NSMutableArray alloc]init]; 

    int i;
    int len = (int) ABAddressBookGetPersonCount(addressBook);
    for(i = 1; i< (len+1); i++){

        ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID) i);
        NSString* name = (NSString *)ABRecordCopyCompositeName(person);
        ABMultiValueRef number = (NSString *)ABRecordCopyValue(person,kABPersonPhoneProperty);
        NSString *mobileNum = (NSString *)ABMultiValueCopyValueAtIndex(number, 0 );

        NSLog(@"Name = %@", name);
        NSLog(@"Number = %@", mobileNum);

        [listOfContacts addObject:name]; 

        [name release];
        [mobileNum release];


    }


    if(ABAddressBookHasUnsavedChanges(addressBook)){
        if(wantToSaveChanges){
            didSave = ABAddressBookSave(addressBook, &error);
            if(!didSave){
                //Error
            }
        }
        else{
            ABAddressBookRevert(addressBook);
        }
    }

当它崩溃时,这是在 Xcode 中突出显示的行:

NSString* name = (NSString *)ABRecordCopyCompositeName(person);

错误状态:

Thread 1: Program received signal: "EXC_BAD_ACCESS"

谁能看出可能是什么问题?我不明白为什么它可以在模拟器上运行但不能在设备上运行?还有为什么它适用于最多两个联系人而不是 3 个或更多联系人??

最佳答案

只是一个猜测:

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID) i);

这条线对我来说有点可疑。我怀疑记录 ID 的编号是从 1 到什么。特别是如果您删除了条目。

这可以解释为什么它可以在模拟器上运行,我猜你只是添加了一些测试联系人而从未删除过一个。

关于iPhone通讯录问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792375/

相关文章:

iphone - 如何获取 UIDevice BatteryLevel 以 1% 或更精细的增量提供状态

iphone - 如何在 iOS5 上运行 iOS 4.3.3 开发的应用程序?

iphone - 如何实现像通知中心的股票行情自动 ScrollView ?

ios - 点击后 UitableView 改变 sectionView

objective-c - ASIHTTPRequest 和 EXC_BAD_ACCESS

ios - KVO 绑定(bind)快速失败

iphone - __block 变量应该保留在 block 中

ios - 如何在 SpriteKit 中同时发射弹丸的同时移动 Sprite ?

ios - 设置以编程方式绘制的 View 的颜色

iphone - 启用 Guard Malloc 时 UIImagePNGRepresentation 中的 EXC_BAD_ACCESS 错误