2013-10-22 112 views
1

这个小宝石花了我一对夫妇的调试时间,所以我想我会在这里发表的问题(和解决方案)。我创建了一个地址簿常量数组(kABPerson*Property),我稍后将其用于提取联系人数据。令人惊讶的是,这些值都显示为零。它看起来像这些背景实际上是全局变量,即使它们看起来像常量(无论如何,在iOS 7上),但我一直无法追查任何内存覆盖问题。可能会发生什么?kABPerson *属性“常量”未初始化

回答

0

事实证明,在kABPerson*Property“常量”实际上是在第一次调用ABAddressBookCreate初始化。在此之前,这些值都是零。下面是一些示例代码:

NSLog(@"Before AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty); 
    ABAddressBookRef store = ABAddressBookCreateWithOptions(NULL, NULL); 
    NSLog(@"After AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty); 

如果你以前没有地址簿访问,你会看到输出如下:

Before AddressBook Create, kABPersonLastNameProperty = 0 
    After AddressBook Create, kABPersonLastNameProperty = 1 

我 其他电话可以通过初始化常数以及但是从我探索一个电话ABAddressBookGetAuthorizationStatus不是足够。

+0

是这仍然是这样吗?我在'appdidfinishlaunching'的第一行使用了一个断点,并且'po kABPersonPhoneMobileLabel'返回正确的值。 – bogardon

+0

我似乎仍然在iOS 8模拟器上的行为。我将样本行复制并粘贴到我的'didFinishLaunching'的顶部。让我知道如果你得到不同的结果! – Ethan