2016-07-14 3 views
0

Я не могу понять, почему мой массив находится за пределами границ. я помещаю элементы подачи в массив «imageArray», и это дает мне фатальную ошибку Heres кодиндекс за пределами swift

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! BlogPost 

    let blogPost: BlogPost = blogPosts[indexPath.row] 
    cell.textLabel?.text = blogPost.postTitle 
    // cell.textLabel?.text = blogPost.postImageLink 
    if cell.postImage?.image == nil { 
    // let cache = ImageLoadingWithCache() 
     // cache.getImage(self.postImageLink, imageView: cell.postImage, defaultImage: "IMG_0079")} 
    if cell.postImage?.image == nil { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

     // retrieve image from url 
     let image = UIImage(data: NSData(contentsOfURL: NSURL(string:self.postImageLink)!)!) 
     self.imageArray.append(image!) 
     dispatch_async(dispatch_get_main_queue(), { Void in 
      // set image in main thread 

      cell.postImage?.image = self.imageArray[indexPath.row] 
     }) 
    } 
    } else { 
      cell.postImage?.image = UIImage(named: "IMG_0079") 
     } 

    } 

    return cell 
} 

конкретно ошибка здесь

cell.postImage?.image = self.imageArray[indexPath.row] 

какой-либо идеи?

+0

попробуйте использовать это расширение UIImageView http://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swift/27712427#27712427 –

+0

Я собираюсь угадать, потому что 'indexPath' является когда закрытие создается, а затем к тому времени, когда замыкание называется 'indexPath.row', является устаревшим и выходит за пределы. Не говоря уже о том, что вы сильно разворачиваетесь, если некоторые из этих «Факультативных» не установлены? Проверьте и разверните их правильно! – ColGraff

ответ

0

В таблице TableView количество строк в секции должно иметь то же значение, что и ваш показатель imageArray. Это означает: если у вас 10 ячеек и всего 9 изображений, 10-я ячейка будет искать 10-е изображение, которого не существует.

Чтобы быть уверенным, что ошибка не появляется больше, просто добавьте следующий если заявление перед установкой вашей ячейки:

if (indexPath.row < self.imageArray.count) { } 

Или, как ColGraff сказал

караул заявление будет лучше укажите, что вы делаете

guard indexPath.row < self.imageArray.count else { return } 

Перед выпуском вашей камеры.

Эти два решения должны избегать любых неприятностей.

+0

Операция 'guard' лучше указала бы, что вы делаете:' guard indexPath.row ColGraff

+0

Да, конечно, но оба работают! Ему решать, предпочитает ли он это использовать или нет! Много разных решений работает ^^ –

+0

Конечно! Я добавил комментарий, потому что это хорошее место для использования 'guard', эта ситуация является одной из причин, по которым он был добавлен в язык. – ColGraff

Смежные вопросы