2014-06-09 28 views
29

我有一个断点集,想要打印我的UITextField的超级视图。 I型po myTextField.superview但我收到以下错误:Xcode LLDB打印语句失败 - NSUndoManager

error: instance method 'undoManager' has incompatible result types in different translation units ('id' vs. 'NSUndoManager *') 
note: instance method 'undoManager' also declared here 
error: 1 errors parsing expression 

这是什么意思,我怎么能打印我的上海华?我发现了一个链接,在代码中提供了一个非常棒的解决方法:http://openradar.io/15890965,但我想要一个更好的解决方案。

+0

同样的故事在这里:我尝试'po tableView.gestureRecognizers'在'UITableView'类别上。 – Drux

+3

我在尝试po帧,边界,递归描述,约束等(仅限内置方法)时多次看到此错误。似乎是一个严重的xcode/lldb错误。 – kylefinn

回答

2

世界人民:我有一个答案!

闪避所有的UIKit错误:输入您的po声明前,键入线 - expr @import UIKit

如果你想在全球范围内开启此为您的应用程序,然后添加下面的断点在您的应用程序委托:

enter image description here

感谢Craig Hockenberry和Steve Streza的更新(找到here)。

+0

本文将告诉您如何为所有项目启用此功能:http://merowing.info/2015/12/little-things-that-c​​an-make-your-life-easier-in-2016/ – rizzes

0

是否myTextField确实指向UITextField?这是出现这个错误的原因之一。例如,下面的代码将被编译,如果我在第三行设置了一个断点,我可以输入po b.superview来重现你所看到的错误。

NSString *a = @"not a view"; 
UITextField *b = (UITextField *)a; 
UIView *view = b.superview; 

试着在你LLDB提示符下键入po [myTextField class],看看它实际上是一个UITextField。它可能是另一种类型的对象,或nil

+0

'myTextField'确实指向'UITextField'(通过插座)。 – rizzes

1

我在调试时用来防止此错误的解决方案是明确投出了所有内容

在你的情况,我会做

po [(UITextField *)myTextField superView] 
+0

从最初的测试来看,这似乎适用于我。然而,上述链接(http://openradar.io/15890965)中的第二条评论声称,即使在明确投射时也会发生这种情况。其他人想要参加? – rizzes

+0

我试图明确铸造,仍然得到这个错误。例如 po(NSString *)[((IBAdBannerView *)adView)recursiveDescription] –

1

你有“myTextField将”任何自定义的存取方法?我已经多次看到这个相同的问题,并且它通常是由po尝试为第一次调用getter时初始化的对象打印属性引起的。例如,如果我尝试在UITableViewCell上运行“po self.imageView.contentMode”,我会得到相同的错误。尝试将您的断点移动到代码中您知道“myTextField”已完全初始化的位置。

+0

我没有myTextField的自定义存取器方法。虽然好想。 – rizzes

0

我在Xcode 5.1.1中得到了这个错误,并通过退出Xcode 5.1.1并尝试Xcode 6来修复它。重新启动Xcode 5.1.1 for Xcode 5.1.1可能也适用于某些人。

+0

我还没有发现Xcode 6的这个错误,所以苹果可能已经修复了它。尽管如此,我们仍然需要更多时间。 – rizzes