2

こんにちは私はこれでカスタムアドレスブックを作成しています私はすべてのものが完璧に機能する電子メールアドレスを持っているこのユーザーだけを取得したいのですが、テーブルビューで画像を表示しようとするとそれは私に与えますEXCBAD Error。私はこのようなコードを持っています

            ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
    for (CFIndex i = 0; i < CFArrayGetCount(people); i++) {
        ABRecordRef person = CFArrayGetValueAtIndex(people, i);

        ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
        for (CFIndex j=0; j < ABMultiValueGetCount(emails); j++) {

            UIImage *img;

            if(ABPersonHasImageData(person))
            {
//              img = [UIImage imageWithData:(NSData *)ABPersonCopyImageDataWithFormat(person,kABPersonImageFormatThumbnail)];
                img = [UIImage imageWithData:(NSData *)ABPersonCopyImageData(person)];
//                if(img != nil)
//                {
//                    [arrImage addObject:img];
//                }
//                else
//                {
                    img = [UIImage imageNamed:@"icon-9.png"];
                    [arrImage addObject:img];
//                }
            }else
            {
                img = [UIImage imageNamed:@"icon-9.png"];
                [arrImage addObject:img];
            }


            NSString* email = (NSString*)ABMultiValueCopyValueAtIndex(emails, j);


//          [arrImage addObject:img];
            [arrEmail addObject:email];

            [img release];
            [email release];
        }
        CFRelease(emails);
    }
    CFRelease(addressBook);
    CFRelease(people);

上記のコードでは、画像をフェッチしてNSMutableArrayに画像を保存していますが、完全に保存されます。しかし、私が以下のコードで画像を表示しようとしているとき

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UIImageView* imagePhoto;

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableFriends dequeueReusableCellWithIdentifier:CellIdentifier];
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

    imagePhoto= [[[UIImageView alloc] initWithFrame:CGRectMake(43.0,10.0,40, 40)] autorelease]; 

    if ([arrEmail count] != 0) 
    {
        imagePhoto.image = [arrImage objectAtIndex:indexPath.row];
        [cell.contentView addSubview:imagePhoto];

        cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[arrEmail objectAtIndex:indexPath.row]];
        cell.detailTextLabel.textColor = [UIColor whiteColor];


    }
    return cell;
}

ここから画像を呼び出すと完全に機能しますimg = [UIImage imageNamed:@"icon.png"];が、アドレス帳から画像を呼び出すとEXCBAD Error、そのコードの何が問題になっているのかというエラーが表示されます。NSMutabeArrayに画像を保存して表示するにはどうすればよいですか?

ちょっと助けてくださいどんな体でも私を助けたり、Google Latitude のように実装するように提案したりできます。これは、iPhoneの名簿から友達を追加するときに表示されます。このアプリケーション機能のようなものを実装したいのですが、すべてのコードがうまく機能しています。名簿から画像を取得してください私を助けてください....

4

4 に答える 4

4

このように NSMutableDictionary のオブジェクトに画像を保存しました

personrecord はのインスタンスです

ABRecordRef

プロジェクトを ARC モードでビルドしていると仮定します。

NSData *imgData = (__bridge_transfer NSData *) ABPersonCopyImageDataWithFormat(personrecord, kABPersonImageFormatThumbnail);

            もし (imgData)
            {
                UIImage *personImage = [UIImage imageWithData:imgData];
                imgData = なし;
                [dict setValue:personImage forKey:@"UserImage"];
            }
            そうしないと
            {
                UIImage *personImage = [UIImage imageNamed:@"defalt_contact_img.png"];
                [dict setValue:personImage forKey:@"UserImage"];
            }

要件に合わせてコードを操作できます。私は辞書を使用しており、配列を使用しているため、配列の addObject メソッドを使用して画像を保存できます。

私は常に、複数の辞書を持つ可変配列でアドレス帳からレコードを取得することを好みます。これにより、レコードの操作が簡単になります。

于 2013-03-05T07:04:08.897 に答える
2

画像が利用可能かどうかを確認してください

if( ABPersonHasImageData( person ) ) {
       UIImage* img = [UIImage imageWithData:(NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)]
    }
于 2012-04-06T15:30:27.140 に答える
0

利用可能な画像があるかどうかを確認する必要があります。

NSData *data = (NSData *)ABPersonCopyImageData(person);
UIImage *img = [UIImage imageWithData:data];

if(img != nil)
{
  // ここに画像を割り当てます
}
そうしないと
{
  img = [UIImage imageNamed:@"icon.png"];
}

私はあなたのコードをクリアしました。これが役立つかもしれないと思います。

于 2012-04-06T13:44:20.360 に答える
0

画像オブジェクトを配列に直接追加することはできません。最初に NSData の画像を変換して配列に追加し、画像を表示しながら NSdata を画像に変換する必要があります。それが役に立てば幸い。

于 2012-04-07T13:33:04.507 に答える