代码之家  ›  专栏  ›  技术社区  ›  Alistra

如何处理iPhone地址簿上的多个属性?

  •  -1
  • Alistra  · 技术社区  · 16 年前

    问题是我总是在任何一个调用的方法上得到运行时崩溃 phones 变量。 在这个版本中,我在 1 ( ABMultiValueCopyValueAtIndex ). 如果我给这行加注释,代码在 2 ( ABMultiValueGetCount ). NSLog 电话 变量。我明白了 (null) 我在iPhone模拟器上测试代码,我有一些虚拟联系人和一些电话号码。 firstName lastName 像个魔术师一样工作。

    for(id person in people){
        NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
        NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
        ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/
    /*2/  id ph, phLb;
        for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {  
            phLb = ABMultiValueCopyLabelAtIndex(phones, i);
            ph = ABMultiValueCopyValueAtIndex(phones, i);
            NSLog(@"%@,%@", phLb, ph);
            CFRelease(phLb);
            CFRelease(ph);
        }
    */  
    NSLog(@"%@", firstName);
    NSLog(@"%@", lastName);
    NSLog(@"%@", phones);
    NSLog(@"%@", phone);
    
    [firstName release];
    [lastName release];
    [phone release];
    [phones release];
    

    }

    3 回复  |  直到 16 年前
        1
  •  0
  •   M. Ryan    16 年前

    我认为你关于如何获得一个多值参考的假设是错误的。我在这台计算机上没有我的AB代码,但是请确认ABRecordCopyValue是合适的方法。然后对ABMultiValueRef如何访问其内容进行了研究。它是一个完全不同于简单字符串的对象集。

        2
  •  0
  •   Alistra    16 年前

    代码:

    addressBook = ABAddressBookCreate();
    people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFRelease(addressBook);
    

        3
  •  -4
  •   tc.    16 年前

    学习使用调试器。还有,你的代码泄露了。

    推荐文章