gpt4 book ai didi

iphone - 控制台消息 : "snarfed from ivar layout..."? 的含义是什么

转载 作者:行者123 更新时间:2023-12-03 18:52:19 25 4
gpt4 key购买 nike

我有一条控制台消息,该消息似乎是由明显不相关的事件触发的。

该消息指出:

snarfed from ivar layout: [propertyName] = [constantString]

其中[propertyName]是我设置字符串常量[constantString]值的属性的名称。

是什么原因导致此消息以及它的含义是什么?

最佳答案

我最近也遇到了这个问题。我能够解决我的具体问题,但我不认为这正是提问者遇到的问题,因为我的问题仅在 VoiceOver 模式下暴露。因此,我将就我认为普遍发生的事情提出想法,然后谈谈我的具体问题。

至于一般问题,我认为 Apple 框架决定查看特定类的所有 ivars,以便提取一些它想要的信息,但 UI 元素的其他部分没有提供这些信息。这对我来说似乎有点奇怪,但这就是我遇到的情况。

因此,继续一般情况,并回答最初的问题。如果您像我一样,那么您的属性名称可能与您的 ivar 相同。尝试为该属性显式定义一个 getter 方法。然后,如果您要返回非零值,请在该 getter 内设置一个断点。查看堆栈跟踪,它应该告诉您苹果框架的哪一部分决定循环遍历您的 ivar 布局以获得它想要的信息。 (如果您的属性和 ivar 没有使用相同的名称,则只需使用 ivar 名称定义一个属性和 getter,并对断点执行相同的操作。)

我的具体案例是自定义表格单元(就像其中一位评论者一样)。在那个牢房里,我有一个与其 ivar 同名的属性。我还为该属性明确定义了 getter。我还引用了 Nib 文件中的自定义表格单元格。所以,它看起来像这样:

class CustomTableViewCell:UITableViewCell
{
NSString *s ;
}
@property(nonatomic,retain) NSString *s ;

并在实现中:

@synthesize s ; 
-(NSString *)s
{
if( !s )
return self.reuseIdentifer ;
return s ;
}

我在 return self.reuseIdentifier 行中放置了一个断点,这向我显示了辅助功能函数的堆栈跟踪。堆栈跟踪显示我的方法被Apple内部方法调用,该方法循环遍历我的所有ivars,寻找可用作我的表格单元格的accessibilityLabel的东西。选择器的名称是“_accessibilityRetrieveTableViewIvarsText”。

更糟糕的是,就我而言,这不仅仅是一个调试器问题,它还因为使用了错误的可访问性标签而弄乱了我的辅助功能界面。

我针对我的具体问题提出了 3 个修复方案:

1) 我为 Nib 内的表格单元格的accessibilityLabel 添加了一个值。这满足了 Apple 框架的要求,它不会搜索我的 ivars。然而,这不是我采用的解决方案,因为我不想要静态辅助功能标签。

2) 我使用空的实现和接口(interface)对 CustomTableViewCell 进行了子类化,并将其用作 Nib 内的表单元格类。这解决了问题,因为 Apple 框架循环遍历该类的 ivars,但其中没有 ivars,并且没有任何“snarf”值。我也没有使用该解决方案,但它可能是最好的解决方案,因为它可以防止 Apple 的框架检查我的 ivars。

3) 我决定的解决方案是将我的 ivar 设为私有(private)并使用不同的名称定义该属性。这似乎是很多人使用属性的标准方式。它看起来像这样:

class CustomTableViewCell:UITableViewCell
{
@private
NSString *_s ;
}
@property(nonatomic,retain) NSString *s ;

并在实现中:

@synthesize s = _s ; 
-(NSString *)s
{
if( !_s )
return self.reuseIdentifer ;
return _s ;
}

这解决了问题,因为当 Apple 检查 ivar 时返回 nil,因此没有任何内容被“捕获”。我仍然不确定这个还是 #2 更合适。

关于iphone - 控制台消息 : "snarfed from ivar layout..."? 的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113695/

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