2012-04-06 1 views
2

привет, я создаю пользовательскую адресную книгу в этом я хочу, чтобы получить только этих пользователей, у которых есть адрес электронной почты, все работает отлично, но когда я пытаюсь показать изображение в таблице, оно дает мне EXCBAD Error. У меня есть код, как этотполучить изображение из адресной книги и сохранить его в NSmutablearray, но показывая, что он дает «EXCBAD Error» в iphone sdk?

  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); 

здесь в коде выше я Fetching изображения и хранить изображение в 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; 
} 

работает perfecly, когда изображение вызывается здесь img = [UIImage imageNamed:@"icon.png"]; но когда изображение вызывается из адресной книги он дает мне ошибку EXCBAD Error Что плохого в этом коде ? как я могу сохранить изображение в NSMutabeArray и показать изображение?

эй помогите мне любой орган может помочь мне или предложить мне реализовать, как Google Latitude в этом вы можете видеть, как добавить друзей из адресной книги iPhone. Я хочу просто реализовать некоторые функции, подобные этой функциональности приложения. Весь код работает только хорошо. я не могу получить изображения из адресной книги, пожалуйста, помогите мне ....

+0

, пожалуйста, помогите кому-нибудь. –

ответ

4

Я хранить изображение в объекте NSMutableDictionary как этот

personrecord является экземпляром

ABRecordRef

Предполагая, что вы строите проект в режиме ARC.

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

      if (imgData) 
      { 
       UIImage *personImage = [UIImage imageWithData:imgData]; 
       imgData = nil; 
       [dict setValue:personImage forKey:@"UserImage"]; 
      } 
      else 
      { 
       UIImage *personImage = [UIImage imageNamed:@"defalt_contact_img.png"]; 
       [dict setValue:personImage forKey:@"UserImage"]; 
      } 

Вы можете манипулировать код, чтобы удовлетворить ваши требования, я использую словарь и вы используете массивы, так что вы можете использовать метод AddObject массива для хранения изображений,

я всегда предпочитаю, чтобы получить записи из адресной книги в изменяемом массиве с несколькими словарями таким образом облегчают манипуляции с записями.

0

Вам нужно проверить состояние, что есть изображение или нет.

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

if(img != nil) 
{ 
    // assign the image here 
} 
else 
{ 
    img = [UIImage imageNamed:@"icon.png"]; 
} 

У меня только что снял код. Я думаю, это может помочь.

+0

Я пробовал, как это, но он по-прежнему дает мне такую ​​же ошибку. может кто-нибудь мне помочь? –

+0

вы можете вставить больше кода здесь? –

+0

сейчас проверьте, есть ли что-то, что вам нужно задать, чем рассказать мне. –

2

попытаться проверить, если изображение доступно или не используется

if(ABPersonHasImageData(person)) { 
     UIImage* img = [UIImage imageWithData:(NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)] 
    } 
+0

вы видели мой код, я уже пробовал это, но он не работает –

0

вы не можете добавить изображение объекта непосредственно и массив, необходимо сначала преобразовать изображение в NSData и добавить в массив , затем показывая изображение, преобразует NSdata в изображение. Надеюсь, поможет.

+0

Я пробовал много, как вы предлагаете, но он дает мне same.can вы можете отправить мне ваш код для этой проблемы ? –