-1

テーブルビューの写真と一緒に電話の連絡先をアルファベット順に表示したい。

連絡先の名前を正しい順序で表示することはできましたが、画像を正しい順序で表示することはできません。

これらを数日間試しましたが、成功しませんでした。

配列を並べ替える方法は知っていますが、画像データを並べ替える方法がわかりません。

みんな助けてください。

ここに私のデモコードがあります:

  NSArray *sortedFirstNames;

 - (void)getPersonDetails
 {
CFErrorRef error = NULL;

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

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

    NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

    NSUInteger i = 0;
    NSMutableArray *firstNames = [[NSMutableArray alloc] init];
    NSMutableArray *firstimages = [[NSMutableArray alloc] init];
    for (i = 0; i < [allContacts count]; i++)
    {
        Person *person = [[Person 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;
        if (lastName == nil)
        {
            fullName = [NSString stringWithFormat:@"%@", firstName];
            [firstNames addObject: fullName];
        }
        else if(firstName ==nil)
        {

                fullName = [NSString stringWithFormat:@"%@", lastName];
                [firstNames addObject: fullName];

        }
        else
        {
            fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
            [firstNames addObject: fullName];

        }

        person.firstName = firstName;
        person.lastName = lastName;
        person.fullName = fullName;


        //email


       imgdata=(__bridge NSData*)ABPersonCopyImageDataWithFormat(contactPerson, kABPersonImageFormatThumbnail);

        NSLog(@"newstris%@",imageStr);
        if(imgdata==nil)
        {

        }
        else
        {
        [firstimages addObject:imgdata];
        }





        [self.tableData addObject:person];
    }
    sortedFirstNames = [firstNames sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];


}

CFRelease(addressBook);

}

セルに画像を表示するコード:

  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(queue, ^{


        UIImage *image1;

        //        cell.imageView.frame = CGRectMake(0, 0, 50, 50);
        if (person.imgdata==nil) {
            image1=[UIImage imageNamed:@"default_profile_pic.jpg"];
        }
        else
        {
          image1 = [UIImage imageWithData:person.imgdata];  
        }
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image1];
        imageView.frame = CGRectMake(6.5, 6.5, 45., 45.);

        dispatch_sync(dispatch_get_main_queue(), ^{
            [cell addSubview:imageView];

        });
    });

ありがとう..

4

2 に答える 2

1

答えはとても簡単です。

Personを格納するクラスにフィールドを追加しますNSData。お気に入り:

 @property (nonatomic, strong) NSData *imageData;

そして使用:

person.imageData = imgdata;
于 2013-06-28T09:04:59.197 に答える
0

私も同じ問題に直面しました。この問題は、このような関連オブジェクトによって修正されました。

ソース配列のロード中:

 objc_setAssociatedObject(hDetails, @"imageUrl", record, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

indexpath の行のセル内:

Record *record = objc_getAssociatedObject(hDetails,@"imageUrl");

詳細については、これを参照してください。

オブジェクト内で objc_setAssociatedObject/objc_getAssociatedObject を使用するにはどうすればよいですか?

于 2013-06-28T10:15:58.110 に答える