1
这个小宝石花了我一对夫妇的调试时间,所以我想我会在这里发表的问题(和解决方案)。我创建了一个地址簿常量数组(kABPerson*Property
),我稍后将其用于提取联系人数据。令人惊讶的是,这些值都显示为零。它看起来像这些背景实际上是全局变量,即使它们看起来像常量(无论如何,在iOS 7上),但我一直无法追查任何内存覆盖问题。可能会发生什么?kABPerson *属性“常量”未初始化
这个小宝石花了我一对夫妇的调试时间,所以我想我会在这里发表的问题(和解决方案)。我创建了一个地址簿常量数组(kABPerson*Property
),我稍后将其用于提取联系人数据。令人惊讶的是,这些值都显示为零。它看起来像这些背景实际上是全局变量,即使它们看起来像常量(无论如何,在iOS 7上),但我一直无法追查任何内存覆盖问题。可能会发生什么?kABPerson *属性“常量”未初始化
事实证明,在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
是不是足够。
是这仍然是这样吗?我在'appdidfinishlaunching'的第一行使用了一个断点,并且'po kABPersonPhoneMobileLabel'返回正确的值。 – bogardon
我似乎仍然在iOS 8模拟器上的行为。我将样本行复制并粘贴到我的'didFinishLaunching'的顶部。让我知道如果你得到不同的结果! – Ethan