iOS模拟器不显示权限警报

时间:2013-09-16 13:32:44

标签: ios abaddressbook

我的应用使用地址簿框架。要显示iOS 6或更高版本中的所有联系人,我必须为其设置权限。

在我第一次在模拟器上运行我的应用程序时,我在下面看到了此警告,但当我再次尝试显示时,我再也看不到警报了。

enter image description here

我重置了内容和设置,但它没有帮助我。因此,当我重新运行应用程序时,它会一直显示联系人,但首先应用程序必须在重置模拟器时显示警报。有人遇到过这个问题吗?

以下代码:

- (void)getPersonOutOfAddressBook
{

    if (self.tableData) {
        [self.tableData removeAllObjects];
    }

    ABAddressBookRef addressBook = ABAddressBookCreate();    

    __block BOOL accessGranted = NO;
    if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            accessGranted = granted;
            dispatch_semaphore_signal(sema);
        });
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
        dispatch_release(sema);
    }
    else
    {
        // we're on iOS 5 or older
        accessGranted = YES;
    }

    if (accessGranted)
    {        
        if (addressBook != nil)
        {
            NSLog(@"Succesful.");

            NSArray *allContacts = (__bridge_transfer NSArray
                                    *)ABAddressBookCopyArrayOfAllPeople(addressBook);
            NSUInteger i = 0;
            for (i = 0; i < [allContacts count]; i++)
            {
                Contact *contact = [[Contact alloc] init];

                ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
                NSString *firstName = (__bridge_transfer NSString
                                       *)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
                NSString *lastName =  (__bridge_transfer NSString
                                       *)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
                NSString *fullName = [NSString stringWithFormat:@"%@ %@",
                                      firstName, lastName];

                NSData  *imgData = (__bridge NSData *)ABPersonCopyImageData(contactPerson);

                contact.firstName = firstName;
                contact.lastName = lastName;
                contact.fullName = fullName;
                contact.image = [UIImage imageWithData:imgData];

                [self.tableData addObject:contact];
            }

            CFRelease(addressBook); 
        }
    }    
}

1 个答案:

答案 0 :(得分:1)

我的经验是:当您在设备上安装应用时,它会要求您允许或不允许某些内容。如果您将其删除并再次安装,则不会再次询问您。例如,应用程序想知道您启用或禁用推送消息。如果您说:是,我启用,然后您从设备中删除该应用程序,再次下载后,安装它将不会再次询问您。它会自动出现在您的设置中。地址簿可以工作相同,但我不确定。 GPS不一样,应用程序要求您使用evertime来启用位置。