2016-02-22 2 views
1

Я получаю следующее сообщение об ошибке:[SearchStockCell сохраняют]: сообщение, отправленное высвобождены например

SearchStockCell retain]: message sent to deallocated instance 0x7f9fa1922c00 

, но я с трудом трассировку вопрос, потому что всякий раз, когда я профиль с зомби, он останавливается без предупреждения или ошибка (2-3 секунды).

enter image description here

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

Есть ли способ отслеживать это? или я могу использовать слабый для ячейки таблицы?

Обновлено

class SearchStockCell: SSBaseTableCell { 
@IBOutlet var symbolLabel: UILabel!  
@IBOutlet var marketLabel: UILabel! 
@IBOutlet var priceLabel: UILabel! 

var stock: StockInfo? { 
    willSet{ "About to step to \(newValue)" 
     if let aStock = newValue { 
      // add KVO on newValue 
      aStock.addObserver(self, 
       forKeyPath: "price", 
       options: NSKeyValueObservingOptions.New, 
       context: nil) 

      aStock.addObserver(self, 
       forKeyPath: "change", 
       options: NSKeyValueObservingOptions.New, 
       context: nil) 

     } 
    } 
    didSet { "Just stepped from \(oldValue)" 
     if let aStock = oldValue { 
      // remove KVO on old value 
      aStock.removeObserver(self, forKeyPath: "price") 
     } 

     if let aStock = oldValue { 
      // remove KVO on old value 
      aStock.removeObserver(self, forKeyPath: "change") 
     } 

     self.configureCell() 
    } 
} 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 

    if keyPath == "price" { 
     self.updatePrice() 
    } 

    if keyPath == "change" { 
     self.updateChange() 
    } 

} 

.... ... .. .

Код кода был найден в SearchStockCell. Я буду пожара API для обновления моих видимых ячеек (он обновит мое царство), который позже предложит изменения в SearchStockCell KVO. Обратите внимание, что я не могу перезагрузить таблицу снова, потому что мне нужно поддерживать позицию tableview, и в ней есть тысячи строк данных.

+0

Можете ли вы добавить код, связанный с SearchStockCell –

+0

Почему вы все еще используете 'keep' в 2016 году? –

+0

@evgeny Я не использую удержание. Ошибка при сбое говорит о том, что в цикле удержания –

ответ

1

Его действительно трудно догадаться из кода, но будет стараться изо всех сил искать ответ Пожалуйста, посмотрите на места

  • использовали SearchStockCell как свойство где-то, если да проверить наличие признаков сильных/слабых. Существует возможный цикл удержания друг друга.
  • Проверьте, используете ли вы объект SearchStockCell в блоке, если да, попробуйте использовать его как слабый объект. Также проверьте другие вещи, сделанные внутри блока.
  • вы используете KVO, проверьте, не исчезнет ли в какой-либо момент наблюдатель.

Скорее всего вопрос, который я могу думать о праве находится в каком-то месте вы назначаете/с помощью SearchStockCell объекта как слабый/сильный, благодаря которому ARC обрабатывает сохранить счетчик неправильно.

+0

Спасибо. Я проверю его на свой код –

+0

Любой успех? Сообщите нам, как вы могли его разрешить, если это возможно –

0

Похоже, что вы сильно преувеличиваете эту ситуацию, добавляя и балансируя KVO на этих ячейках таблицы.

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

В качестве дополнительной заметки в Realm скоро появится функция отслеживания вложений/обновлений/удалений в источнике данных табличного представления, поэтому, надеюсь, после этого вы можете использовать это здесь (отказ от ответственности: я работаю в Realm).

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

  • Нет связанных вопросов^_^