gpt4 book ai didi

iphone - 崩溃在 actionForLayer :forKey:

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:43 26 4
gpt4 key购买 nike

在更改某些 UILabel 的框架时,我有一个神秘的 EXC_BAD_ACCESS。崩溃是随机的,通常我必须重复几分钟的条件。

启用 NSZombies 以及其他内存调试标志(NSDebugEnabled、MallocStackLogging)并没有帮助,崩溃仍然是不透明的:控制台中只有 BAD_ACCESS,没有任何消息。目标似乎是正确且有效的,因此它看起来不像是释放内存的问题。

为了获得更多信息,我将 UILabel 子类化并重写了崩溃函数:

@implementation TestUILabel
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {
return [super actionForLayer:layer forKey:event];
}
@end

它在 super 的方法中崩溃了,但在检查时一切似乎都是正确的(为“self”和“layer”打印 retainCount 分别给出 3 和 2):

(gdb) po self

< TestUILabel: 0x6ac2800; baseClass = UILabel; frame = (173 174; 0 0); text = '54 m²'; opaque = NO; autoresize = LM+TM; autoresizesSubviews = NO; userInteractionEnabled = NO; animations = { position=< CABasicAnimation: 0xe07ba60>; }; layer = < CALayer: 0xbf1b950>>

(gdb) po event

bounds

(gdb) po layer

< CALayer:0xbf1b950; position = CGPoint (173 174); bounds = CGRect (0 0; 0 0); delegate = < TestUILabel: 0x6ac2800; baseClass = UILabel; frame = (173 174; 0 0); text = '54 m²'; opaque = NO; autoresize = LM+TM; autoresizesSubviews = NO; userInteractionEnabled = NO; animations = { position=< CABasicAnimation: 0xe07ba60>; }; layer = < CALayer: 0xbf1b950>>; contents = < CGImage 0xe04ed60>; opacity = 1; animations = [position=< CABasicAnimation: 0xe07ba60>]>

有人遇到过类似的问题吗?或者有任何想法这可能来自哪里?

提前致谢!

编辑:这是完整的崩溃回溯:

Thread 1, Queue :
com.apple.main-thread
#0 0x00459b2c in -[UIView(CALayerDelegate) actionForLayer:forKey:] ()
#1 0x00eaaac7 in -[CALayer actionForKey:] ()
#2 0x00ea80fe in actionForKey(CALayer*, CA::Transaction*, NSString*) ()
#3 0x00ea8066 in beginChange(CALayer*, CA::Transaction*, unsigned int, objc_object*&) ()
#4 0x00eaba3a in CALayerSetPosition(CALayer*, CA::Vec2 const&, bool) ()
#5 0x00eab8b5 in -[CALayer setPosition:] ()
#6 0x00eab7cc in -[CALayer setFrame:] ()
#7 0x0045739d in -[UIView(Geometry) setFrame:] ()
#8 0x00542a68 in -[UILabel setFrame:] ()
#9 0x0000a97f in -[MosaicElementView setupWithAdvert:] at /Users/eino/Prog/AJ/Classes/Search/SubViews/MosaicElementView.m:30
#10 0x00079cb9 in -[SearchResultsViewController setupElement:withCell:indexPath:actualIndex:] ()
#11 0x000797a2 in -[SearchResultsViewController tableView:cellForRowAtIndexPath:] ()
#12 0x004957fa in -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] ()
#13 0x0048b77f in -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] ()
#14 0x004a0450 in -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] ()
#15 0x00498538 in -[UITableView layoutSubviews] ()
#16 0x00eb0451 in -[CALayer layoutSublayers] ()
#17 0x00eb017c in CALayerLayoutIfNeeded ()
#18 0x00ea937c in CA::Context::commit_transaction(CA::Transaction*) ()
#19 0x00ea90d0 in CA::Transaction::commit() ()
#20 0x00ed97d5 in CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) ()
#21 0x017e9fbb in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ ()
#22 0x0177f0e7 in __CFRunLoopDoObservers ()
#23 0x01747bd7 in __CFRunLoopRun ()
#24 0x01747240 in CFRunLoopRunSpecific ()
#25 0x01747161 in CFRunLoopRunInMode ()
#26 0x01e7d268 in GSEventRunModal ()
#27 0x01e7d32d in GSEventRun ()
#28 0x0043042e in UIApplicationMain ()
#29 0x000021fe in main at /Users/eino/Prog/AJ/main.m:11

第 9 帧的粗线基本上只是帧变化:

labelPrice.frame = rect;

rect 是一个正确的 CGRect (106, 143, 86, 22)。

最佳答案

你可能已经检查过了,但它值得一试......

您确定您没有做任何会影响后台线程中任何 UI 元素的事情吗?也许您正在做一些与此搜索相关的计算,它会更改某些 View 的属性。

在我忘记调用 performSelectorOnMainThread:withObject:waitUntilDone: 然后在后台更改 UI 的情况下,我已经看到了他的那种事情。

关于iphone - 崩溃在 actionForLayer :forKey:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com