我正在制作一个音频将在后台播放的应用程序.在以下代码中,bgTask未声明.bgTask应该是什么样的对象?
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中我收到联系信息直接购买这样做...
ABAddressBookRef m_addressbook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook);
for (int i=0;i < nPeople;i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
CFStringRef company,firstName,lastName;
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
company = ABRecordCopyValue(ref, kABPersonOrganizationProperty);
}
Run Code Online (Sandbox Code Playgroud)
因此,我需要首先检查这是否为我的应用程序的开/关设置 - >隐私 - >联系人开/关.
为此,我这样做:
__block BOOL accessGranted = NO;
float sysver = [[[UIDevice currentDevice]systemVersion]floatValue];
if(sysver>=6) {
ABAddressBookRef addressBook = ABAddressBookCreate();
if (ABAddressBookRequestAccessWithCompletion != NULL) {
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessGranted = granted;
dispatch_semaphore_signal(sema);});
dispatch_semaphore_wait(sema, …Run Code Online (Sandbox Code Playgroud) Swift(iOS 8/iOS 9):当我在真实设备上的设置中更改权限AddressBook时应用程序崩溃

我正在制作一个iOS应用程序,并且在iOS世界中是新手。在这个应用程序中,我想访问用户联系人。一切进展顺利,运作良好。但是我经历了一个惊人的行为,因为我是android开发人员,所以在Android中还从未见过。
在iOS中访问用户联系人,我使用的是Contacts Framework。我认为它比iOS中的其他任何版本都相对容易和快捷。但是,我无法完全利用这一点。让我告诉你我做了什么,我遇到了什么问题。
我在ViewController和User上请求权限的过程是通过Dialog询问联系人权限的提示。如果用户允许许可,一切都会顺利进行,但是当用户不允许许可时,就会出现麻烦。
访问用户联系人更为必要,因为我的应用程序的整个工作和基本业务构想都取决于用户联系人。现在要处理这个问题,当用户不允许权限时,我将显示另一个对话框,告诉他必须允许权限,以便App可以继续进行。
现在,我将用户带到他可以允许该权限的设置,或者他可以简单地再次返回。现在结账2件
情况1:当用户进入“设置”屏幕并在未经允许的情况下再次返回时,当我将用户带到“设置”屏幕时,除了允许其返回我的应用程序外,我尝试再次向他显示相同的对话框,以在每种情况下均允许其访问权限。一切顺利。我的意思是出于测试目的,我多次重复相同的步骤,我的意思是我不允许自己的“联系人”权限,这需要我进行设置,从设置屏幕返回到我的应用程序,然后我又能看到与我相同的对话框设置屏幕。这可以
情况2:当用户进入设置屏幕并且他允许该权限时:在这里,当用户允许该权限时,我在日志中收到消息“来自调试器的消息:由于信号9而终止”。当我回到我的应用程序时,它又重新开始了。看来我的应用程序重新打开或在后台崩溃。
重要说明:为此,我检查了我的记忆或任务在后台执行的所有操作,但后台没有任何操作。崩溃前我的内存大小为54.78 mb。而且我不认为这值得担心。
有人知道发生了什么吗?