Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 应用程序在设备上崩溃,但在模拟器上运行良好_Iphone_Ios_Addressbook - Fatal编程技术网

Iphone 应用程序在设备上崩溃,但在模拟器上运行良好

Iphone 应用程序在设备上崩溃,但在模拟器上运行良好,iphone,ios,addressbook,Iphone,Ios,Addressbook,我的addressbook应用程序在模拟器上运行良好。我有联系人添加功能。 在设备(IOS 6)上,它会崩溃。。有以下消息 ContactPro[837] has active assertions beyond permitted time: {( <BKProcessAssertion: 0x1f5a28a0> identifier: Suspending process: ContactPro[837] permittedBackgroundDuration: 10.0000

我的addressbook应用程序在模拟器上运行良好。我有联系人添加功能。 在设备(IOS 6)上,它会崩溃。。有以下消息

ContactPro[837] has active assertions beyond permitted time: 
{(
<BKProcessAssertion: 0x1f5a28a0> identifier: Suspending process: ContactPro[837] permittedBackgroundDuration: 10.000000 reason: suspend owner pid:52 preventSuspend         preventThrottleDownCPU  preventThrottleDownUI )}
任何人都可以提供一些如何解决它的提示

为了在IOS6中访问地址簿,我使用了以下几行。。 ABAddressBookRef ab=ABAddressBookCreateWithOptions(NULL,NULL)

我更改了通讯录的密码

ABAddressBookRef abcd = ABAddressBookCreateWithOptions(NULL, NULL);
__block BOOL accessGranted = NO;
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
    ABAddressBookRequestAccessWithCompletion(abcd, ^(bool granted, CFErrorRef error) {
        // First time access has been granted, add the contact
        accessGranted = granted;
    });
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
    // The user has previously given access, add the contact
    accessGranted = YES;
}
else {
    // The user has previously denied access
    // Send an alert telling user to change privacy setting in settings app
}

if (accessGranted) {
    CFIndex recordsCount = ABAddressBookGetPersonCount(abcd);
    CFArrayRef all = ABAddressBookCopyArrayOfAllPeople(abcd);
    ABRecordRef ref = CFArrayGetValueAtIndex(all,recordsCount);
    NSLog(@"%@", ref);
    ABRecordID record = ABRecordGetRecordID(ref);
}                                                                                              
有了这一点,我也没有联系的参考?。。此外,该应用程序在模拟器和设备中都会崩溃。然而,我正在访问通讯录#请建议我。。可以做些什么来解决这个问题。谢谢


谢谢和问候

我认为问题在于:您正在使用信号量阻止线程,直到“绿灯”出现。但是您正在线程0(管理用户界面的主线程)上执行此代码。 因此,您正在阻止用户界面中的所有更改,包括请求访问联系人的警报

编辑新代码 第一件事:试一试设备。出于某些原因,模拟器始终返回authorized,即使不是:

第二件事,用户第一次授权应用程序时不会执行“if(accessgrated)”,因为它是在完成块之前执行的(完成块等待用户决定),但块之后的代码会立即执行。您应该在另一个函数中移动该代码(例如,仅在授权后在完成块后调用)。 但是,出于测试目的,此代码应该在您第二次尝试访问AB(一旦授权)时起作用

您的AccessGrazed代码很好,除了一件事:如果您有一个250条记录的数组,那么您正在尝试访问记录250(该记录不存在,最后一条记录是249)。 换行

ABRecordRef ref = CFArrayGetValueAtIndex(all,recordsCount);
用这个

ABRecordRef ref = CFArrayGetValueAtIndex(all,recordsCount-1);

我试过了,效果很好

我认为问题在于:你正在使用信号量阻止线程,直到“绿灯”出现。但是您正在线程0(管理用户界面的主线程)上执行此代码。 因此,您正在阻止用户界面中的所有更改,包括请求访问联系人的警报

编辑新代码 第一件事:试一试设备。出于某些原因,模拟器始终返回authorized,即使不是:

第二件事,用户第一次授权应用程序时不会执行“if(accessgrated)”,因为它是在完成块之前执行的(完成块等待用户决定),但块之后的代码会立即执行。您应该在另一个函数中移动该代码(例如,仅在授权后在完成块后调用)。 但是,出于测试目的,此代码应该在您第二次尝试访问AB(一旦授权)时起作用

您的AccessGrazed代码很好,除了一件事:如果您有一个250条记录的数组,那么您正在尝试访问记录250(该记录不存在,最后一条记录是249)。 换行

ABRecordRef ref = CFArrayGetValueAtIndex(all,recordsCount);
用这个

ABRecordRef ref = CFArrayGetValueAtIndex(all,recordsCount-1);

我试过了,效果很好

你是否在某处使用了
beginBackgroundTaskWithExpirationHandler
?你能发布一些代码吗?您是否使用ABAddressBookRequestAccessWithCompletion请求权限?@LombaX是的,我使用ABAddressBookRequestAccessWithCompletion请求权限。。在模拟器中运行良好#谢谢你的帮助response@sergio不,我没有使用beginBackgroundTaskWithExpirationHandler#感谢您的回复您是否在某处使用了
beginBackgroundTaskWithExpirationHandler
?您可以发布一些代码吗?您是否使用ABAddressBookRequestAccessWithCompletion请求权限?@LombaX是的,我使用ABAddressBookRequestAccessWithCompletion请求权限。。在模拟器中运行良好#谢谢你的帮助response@sergio不,我没有使用beginBackgroundTaskWithExpirationHandler#感谢您的回复我根据您的建议更改了通讯簿访问代码。但我没有得到一个新联系人创建的参考。请检查我的更新代码#非常感谢你的回答!它起作用了!早些时候,我在通讯录上贴了一个问题,请检查一下#如果你做过类似的事情,我希望你能回答#谢谢没有人做过这个,但我想我已经找到了一个解决方案,看看:-)我根据你的建议更改了通讯簿访问代码。但我没有得到一个新联系人创建的参考。请检查我的更新代码#非常感谢你的回答!它起作用了!早些时候,我在通讯录上贴了一个问题,请检查一下#如果你做过类似的事情,我希望你能回答#谢天谢地,没有人做过这件事,但我想我已经找到了解决方案,请查看:-)