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
如何访问IOS联系人并在Uitableview中显示_Ios_Iphone - Fatal编程技术网

如何访问IOS联系人并在Uitableview中显示

如何访问IOS联系人并在Uitableview中显示,ios,iphone,Ios,Iphone,我是iphone开发的新手,我正在开发一个应用程序,它可以读取tableview中的所有联系人和显示,并读取tableview中的所有日历事件和显示。使用ABAddressBook框架。以数组形式获取联系人列表,并在UItableview中填充此列表,您可以使用UITableViewCellAccessoryCheckmark显示选定的联系人。 添加地址簿框架 #导入地址簿/AddressBook.h 然后我有一个工作示例:您必须根据自己的要求更改代码: -(void)loadContac

我是iphone开发的新手,我正在开发一个应用程序,它可以读取tableview中的所有联系人和显示,并读取tableview中的所有日历事件和显示。

使用ABAddressBook框架。以数组形式获取联系人列表,并在UItableview中填充此列表,您可以使用UITableViewCellAccessoryCheckmark显示选定的联系人。

  • 添加地址簿框架

    • #导入地址簿/AddressBook.h
然后我有一个工作示例:您必须根据自己的要求更改代码:

-(void)loadContact
{
    dispatch_async(dispatch_get_main_queue(), ^(void){
        if (loadingView == nil) {
            loadingView = [LoadingView loadingViewInSuperView:self.view];
        }
    });

    ABAddressBookRef ab;
    ab = ABAddressBookCreate();


    int len = (int) ABAddressBookGetPersonCount(ab);
    NSMutableArray *allPeople = (__bridge NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(ab);
    int i;
    for(i = 0; i < len ; i++)
    {

        // Initialize the dictionary
        NSMutableDictionary *dictAddress = [[NSMutableDictionary alloc] init];
        ABRecordRef person = (__bridge ABRecordRef)([allPeople objectAtIndex:i]);

        [dictAddress setValue:@"0" forKey:@"sel"];

        [dictAddress setValue:@"" forKey:@"FirstName"];
        [dictAddress setValue:@"" forKey:@"LastName"];
        [dictAddress setValue:@"" forKey:@"Name"];

        [dictAddress setValue:@"" forKey:@"PhoneMobile"];
        [dictAddress setValue:@"" forKey:@"PhoneHome"];
        [dictAddress setValue:@"" forKey:@"PhoneWork"];

        [dictAddress setValue:@"" forKey:@"CompanyName"];

        [dictAddress setValue:@"" forKey:@"AddressCity"];
        [dictAddress setValue:@"" forKey:@"AddressCountry"];
        [dictAddress setValue:@"" forKey:@"AddressState"];
        [dictAddress setValue:@"" forKey:@"AddressCountryCode"];
        [dictAddress setValue:@"" forKey:@"AddressStreet"];
        [dictAddress setValue:@"" forKey:@"AddressZipCode"];

        [dictAddress setValue:@"" forKey:@"EmailWork"];
        [dictAddress setValue:@"" forKey:@"EmailHome"];
        [dictAddress setValue:@"" forKey:@"EmailOther"];

        [dictAddress setValue:@"" forKey:@"URLWork"];
        [dictAddress setValue:@"" forKey:@"URLHome"];
        [dictAddress setValue:@"" forKey:@"URLOther"];

        [dictAddress setValue:@"" forKey:@"Note"];

        NSMutableString *xmlString = [NSMutableString string];

        if(ABRecordCopyValue(person, kABPersonFirstNameProperty) != NULL)
        {
            [dictAddress setValue:(NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty)) forKey:@"FirstName"];

            [xmlString appendString:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty)];
        }


        if(ABRecordCopyValue(person, kABPersonLastNameProperty) != NULL)
        {
            [dictAddress setValue:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty) forKey:@"LastName"];

            [xmlString appendString:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty)];
        }

        [dictAddress setValue:xmlString forKey:@"Name"];

        if(ABRecordCopyValue(person, kABPersonOrganizationProperty) != NULL)
        {
            CFStringRef company = ABRecordCopyValue(person, kABPersonOrganizationProperty);
            if(company)
            {
                [dictAddress setValue:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonOrganizationProperty) forKey:@"CompanyName"];
                CFRelease(company);
            }
        }

        if (ABRecordCopyValue(person, kABPersonPhoneProperty) != NULL)
        {

            ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonPhoneProperty));

            NSString* Str=@"";
            NSString* phoneLabel;

            for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++)
            {
                phoneLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(phones, i);

                //if([phoneLabel isEqualToString:@"_$!<Main>!$_"])
                if([phoneLabel isEqualToString:@"_$!<Home>!$_"])
                {
                    Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i);
                    Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""];
                    Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];




                    [dictAddress setValue:Str forKey:@"PhoneHome"];
                }
                else if([phoneLabel isEqualToString:@"_$!<Mobile>!$_"])
                {
                    Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i);
                    Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""];
                    Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""];
                    [dictAddress setValue:Str forKey:@"PhoneMobile"];
                }
                //else if([phoneLabel isEqualToString:@"_$!<Other>!$_"])
                else if([phoneLabel isEqualToString:@"_$!<Work>!$_"])
                {
                    Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i);
                    Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""];
                    Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""];
                    Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""];
                    [dictAddress setValue:Str forKey:@"PhoneWork"];
                }
            }
            CFRelease(phones);

        }


        if (ABRecordCopyValue(person, kABPersonAddressProperty) != NULL)
        {

            //Person address
            ABMultiValueRef addresses = ABRecordCopyValue(person, kABPersonAddressProperty);
            if(ABMultiValueGetCount(addresses) != 0)
            {
                for(int i=0;i<ABMultiValueGetCount(addresses);i++)
                {
                    CFStringRef address = ABMultiValueCopyValueAtIndex(addresses, i);


                    NSString *StrCity = [NSString stringWithFormat:@"%@", [(__bridge NSDictionary*)address objectForKey:@"City"]];
                    [dictAddress setValue:StrCity forKey:@"AddressCity"];

                    NSString *StrCountry = [NSString stringWithFormat:@"%@", [ (__bridge
                                                                                NSDictionary*)address objectForKey:@"Country"]];
                    [dictAddress setValue:StrCountry forKey:@"AddressCountry"];

                    NSString *StrState = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"State"]];
                    [dictAddress setValue:StrState forKey:@"AddressState"];

                    NSString *StrCountryCode = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"CountryCode"]];
                    [dictAddress setValue:StrCountryCode forKey:@"AddressCountryCode"];

                    NSString *StrStreet = (NSString*)[(__bridge NSDictionary*)address objectForKey:@"Street"];
                    [dictAddress setValue:StrStreet forKey:@"AddressStreet"];

                    NSString *StrZip = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"ZIP"]];
                    [dictAddress setValue:StrZip forKey:@"AddressZipCode"];

                }

            }
            else
                CFRelease(addresses);
        }

        if (ABRecordCopyValue(person, kABPersonEmailProperty) != NULL)
        {
            //person email

            NSString* emailLabel;

            ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
            if(ABMultiValueGetCount(emails) != 0)
            {
                for(int i=0;i<ABMultiValueGetCount(emails);i++)
                {
                    emailLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(emails, i);

                    if ([emailLabel isEqualToString:@"_$!<Work>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailWork"];
                    }
                    else if([emailLabel isEqualToString:@"_$!<Home>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailHome"];
                    }
                    else if([emailLabel isEqualToString:@"_$!<Other>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailOther"];
                    }
                }
            }
            else
                CFRelease(emails);
        }


        if(ABRecordCopyValue(person, kABPersonURLProperty) != NULL)
        {
            NSString* URLLabel;

            ABMultiValueRef urls = ABRecordCopyValue(person, kABPersonURLProperty);
            if(ABMultiValueGetCount(urls) != 0)
            {
                for(int i=0;i<ABMultiValueGetCount(urls);i++)
                {
                    URLLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(urls, i);

                    if ([URLLabel isEqualToString:@"_$!<Work>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLWork"];
                    }
                    else if([URLLabel isEqualToString:@"_$!<Home>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLHome"];
                    }
                    else if([URLLabel isEqualToString:@"_$!<Other>!$_"])
                    {
                        [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLOther"];
                    }

                }
            }

        }

        if(ABRecordCopyValue(person, kABPersonNoteProperty) != NULL)
        {
            [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonNoteProperty) forKey:@"Note"];
        }


        if (ABRecordCopyValue(person, kABPersonCreationDateProperty) != NULL)
        {
            [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonCreationDateProperty) forKey:@"CreationDate"];
        }


        if (ABRecordCopyValue(person, kABPersonModificationDateProperty) != NULL)
        {
            [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonModificationDateProperty) forKey:@"ModificationDate"];
        }

        /*
         if (![[dictAddress valueForKey:@"EmailHome"] isEqualToString:@""] || ![[dictAddress valueForKey:@"EmailOther"] isEqualToString:@""] || ![[dictAddress valueForKey:@"EmailWork"] isEqualToString:@""])
         {
         dictAddress = nil;
         }*/

        NSLog(@"%@",dictAddress);

        NSMutableArray *numberDict = [[NSMutableArray alloc]init];
        if (![[dictAddress valueForKey:@"PhoneHome"] isEqualToString:@""]) {
//            [numberDict setValue:[dictAddress valueForKey:@"PhoneHome"] forKey:@"PhoneHome"];
            [numberDict addObject:[dictAddress valueForKey:@"PhoneHome"]];
        }
        if (![[dictAddress valueForKey:@"PhoneMobile"] isEqualToString:@""]) {
//            [numberDict setValue:[dictAddress valueForKey:@"PhoneMobile"] forKey:@"PhoneMobile"];
            [numberDict addObject:[dictAddress valueForKey:@"PhoneMobile"]];
        }
        if (![[dictAddress valueForKey:@"PhoneWork"] isEqualToString:@""]) {
            [numberDict addObject:[dictAddress valueForKey:@"PhoneWork"]];
//            [numberDict setValue:[dictAddress valueForKey:@"PhoneWork"] forKey:@"PhoneWork"];
        }
        [dictPhoneNumberFinal setObject:numberDict forKey:[dictAddress valueForKey:@"FirstName"]];
    }
    dispatch_async(dispatch_get_main_queue(), ^(void){
        if (loadingView) {
            [loadingView removeView];
            loadingView = nil;
        }
    });


    //arrContactNames = [[dictPhoneNumberFinal allKeys] mutableCopy];

   arrContactNames =[[[dictPhoneNumberFinal allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] mutableCopy];




    if(arrContactNames.count != 0)
    {
        [tblView reloadData];
        //        UIView *view = [[UIView alloc] initWithFrame:self.tableView.frame];
        //                [view setUserInteractionEnabled:FALSE];
        //
        //        [view setBackgroundColor:[UIColor clearColor]];
        //        [self.tableView addSubview:view];
        //        [self.tableView setScrollEnabled:NO];
        //        [self addPopOverViewWithTag:1 :arrContactNames];

    }
    else{
        [appDelegate userAlert:@"No contacts available."];
    }
}
-(无效)加载触点
{
dispatch\u async(dispatch\u get\u main\u queue(),^(void){
如果(加载视图==nil){
loadingView=[loadingView LoadingViewInsPerView:self.view];
}
});
ABAddressBookRef ab;
ab=ABAddressBookCreate();
int len=(int)ABAddressBookGetPersonCount(ab);
NSMutableArray*allPeople=(\uu桥NSMutableArray*)ABAddressBookCopyArrayFallPeople(ab);
int i;
对于(i=0;i