2015-12-21 3 views
1

У меня есть отчет о сбоях для SIGSEGV. Я думаю, что это действительно не очевидно, потому что есть:Crash [UITableViewCell initWithStyle: reuseIdentifier:]

  1. Нет фоновых манипуляций пользовательского интерфейса.
  2. Никаких внешних манипуляций с CALayer.
  3. UITableViewCell инициализирован программно, без использования xib или раскадровки.
  4. Отсутствие KVO для свойств ячейки.

Это произошло только один раз, так что нет никаких шагов, чтобы воспроизвести

Краш журнала ниже:

0 libobjc.A.dylib      0x0000000181d6dbd0 objc_msgSend + 16 
1 Foundation       0x0000000182fc28e4 -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 320 
2 QuartzCore       0x0000000184ddf374 CA::Layer::set_delegate(objc_object*) + 68 
3 UIKit        0x00000001873e2538 -[UIView _createLayerWithFrame:] + 576 
4 UIKit        0x00000001873e1ff8 UIViewCommonInitWithFrame + 684 
5 UIKit        0x00000001873e1ce8 -[UIView initWithFrame:] + 136 
6 UIKit        0x00000001874c0ee8 -[UITableViewCell initWithStyle:reuseIdentifier:] + 108 
7 MyApp        0x000000010017d208 MyApp.MessageCell.init (MyApp.MessageCell.Type)(style : __C.UITableViewCellStyle, reuseIdentifier : Swift.String?) -> MyApp.MessageCell (MessageCell.swift:23) 
8 MyApp        0x000000010017d340 @objc MyApp.MessageCell.init (MyApp.MessageCell.Type)(style : __C.UITableViewCellStyle, reuseIdentifier : Swift.String?) -> MyApp.MessageCell (MessageCell.swift:0) 
9 UIKit        0x000000018752bbe0 -[UITableView _dequeueReusableViewOfType:withIdentifier:] + 524 
10 UIKit        0x0000000187567bd4 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 84 
11 MyApp        0x000000010016d60c MyApp.ChatDataSource.dequeueMessageCell (MyApp.ChatDataSource)(MyApp.Message, tableView : __ObjC.UITableView, indexPath : __ObjC.NSIndexPath) -> __ObjC.UITableViewCell (ChatDataSource.swift:76) 
12 MyApp        0x000000010016cf48 MyApp.ChatDataSource.cellAtIndexPath (MyApp.ChatDataSource)(__ObjC.NSIndexPath!, inTableView : __ObjC.UITableView!) -> __ObjC.UITableViewCell! (ChatDataSource.swift:55) 
13 MyApp        0x000000010016d324 @objc MyApp.ChatDataSource.cellAtIndexPath (MyApp.ChatDataSource)(__ObjC.NSIndexPath!, inTableView : __ObjC.UITableView!) -> __ObjC.UITableViewCell! (ChatDataSource.swift:0) 
14 MyApp        0x000000010005cb34 -[SFPaginationDataSource tableView:cellForRowAtIndexPath:] (SFPaginationDataSource.m:202) 
15 UIKit        0x000000018773131c -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 688 
16 UIKit        0x0000000187731484 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 76 
17 UIKit        0x00000001877207e8 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2356 
18 UIKit        0x0000000187735fb0 -[UITableView _performWithCachedTraitCollection:] + 100 
19 UIKit        0x00000001874cb08c -[UITableView layoutSubviews] + 172 
20 UIKit        0x00000001873db778 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 652 
21 QuartzCore       0x0000000184deab2c -[CALayer layoutSublayers] + 144 
22 QuartzCore       0x0000000184de5738 CA::Layer::layout_if_needed(CA::Transaction*) + 288 
23 UIKit        0x00000001873f2454 -[UIView(Hierarchy) layoutBelowIfNeeded] + 920 
24 TextViewController    0x0000000100ec03f4 0x100ea8000 + 99316 
25 MyApp        0x00000001001f5680 MyApp.ChatViewControler.viewWillAppear (MyApp.ChatViewControler)(Swift.Bool) ->() (ChatViewControler.swift:52) 
26 MyApp        0x00000001001f59a4 @objc MyApp.ChatViewControler.viewWillAppear (MyApp.ChatViewControler)(Swift.Bool) ->() (ChatViewControler.swift:0) 
27 UIKit        0x00000001873f874c -[UIViewController _setViewAppearState:isAnimating:] + 624 
28 UIKit        0x00000001873f84c0 -[UIViewController __viewWillAppear:] + 152 
29 UIKit        0x0000000187591ce4 -[UINavigationController _startCustomTransition:] + 1048 
30 UIKit        0x000000018749e9b8 -[UINavigationController _startDeferredTransitionIfNeeded:] + 684 
31 UIKit        0x000000018749e694 -[UINavigationController __viewWillLayoutSubviews] + 56 
32 UIKit        0x000000018749e5fc -[UILayoutContainerView layoutSubviews] + 204 
33 UIKit        0x00000001873db778 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 652 
34 QuartzCore       0x0000000184deab2c -[CALayer layoutSublayers] + 144 
35 QuartzCore       0x0000000184de5738 CA::Layer::layout_if_needed(CA::Transaction*) + 288 
36 QuartzCore       0x0000000184de55f8 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 28 
37 QuartzCore       0x0000000184de4c94 CA::Context::commit_transaction(CA::Transaction*) + 248 
38 QuartzCore       0x0000000184de49dc CA::Transaction::commit() + 508 
39 UIKit        0x00000001873d1c78 _afterCACommitHandler + 176 
40 CoreFoundation      0x00000001826a4588 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 28 
41 CoreFoundation      0x00000001826a232c __CFRunLoopDoObservers + 368 
42 CoreFoundation      0x00000001826a275c __CFRunLoopRun + 924 
43 CoreFoundation      0x00000001825d1680 CFRunLoopRunSpecific + 380 
44 GraphicsServices      0x0000000183ae0088 GSEventRunModal + 176 
45 UIKit        0x0000000187448d90 UIApplicationMain + 200 
46 MyApp        0x0000000100199718 main (AppDelegate.swift:17) 
47 ???         0x00000001821728b8 0x0 + 0 

MessageCell.swift

import UIKit 

class MessageCell: UITableViewCell, ConfigurableCell { 

    var messageView = MessageView() 

    var alignment: MessageLayout.MessageAligmment { 
     get { return messageView.layout.mode } 
     set { 
      messageView.layout.mode = newValue 
     } 
    } 

    override required init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     defaultInit() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     defaultInit() 
    } 

    func defaultInit() { 
     selectionStyle = .None 
     contentView.addSubview(messageView) 
     messageView.autoPinEdgesToSuperviewEdges() 
    } 

    func configure(item: Message) { 
     messageView.configure(item) 
    } 
} 
+0

Без какого-либо кода у нас нет возможности диагностировать. Что находится на линии 23 of MessageCell.swift? –

+0

Нет, проблема. Я мог бы предоставить код, но его действительно простой – yariksmirnov

+0

, если он когда-либо случается один раз, и вы не можете воспроизвести его, это своего рода спекулятивный факт о том, что произошло. имеет какое-то отношение к вашему SFPaginationDataSource –

ответ

0

«вывод о том, он не является недопустимым наблюдателем KVO, потому что это происходит при инициализации объекта, неверно. Потенциальные причины, KVO использует боковую таблицу для связанных адресов объектов с наблюдателями. Это означает, что если первоначальное наблюдение было освобождено, то следующий объект, который занимает тот же адрес, является де-факто новым наблюдателем. KVO будет действовать так, как если бы наблюдался новый объект, и он попытается исправить уведомления об изменениях для наблюдателей, возможно, еще нераспределенных ». От discussion