Xcode 4.0.1已经开始给我一个内部编译器错误。它只是说“总线错误”。它出现在我的一个.m文件的底部,现在差不多有4000行。
我看过this question,但我没有犯这个错误,当它出现时,我通常可以通过在某处添加一些随机代码来修复它。当它第一次出现时,我将它追踪到我在一堆新代码中设置视图框架的位置:
view.frame = CGRectMake(otherView.frame.origin.x, 0, otherView2.frame.size.width, 40);
如果我用硬编码值替换了otherView和otherView2引用,则问题就消失了。或者如果我只是将int x = 0;
放在违规行之上,它就会消失。
我也看了this question,但它没有明确的答案。它似乎不是任何单独的代码行;它只是随机出现。谷歌没有任何我能找到的明确解决方案。
我已经尝试过该项目的所有可能的编译器(GCC 4.2,LLVM GCC 4.2和LLVM编译器2.0,它们都有问题。我将静态分析器设置为运行每个构建,并将其关闭没有帮助。This question似乎表明它是编译器中的一个错误。我只是卡住了吗?有解决方法吗?
编辑:另一个例子:它再次发生,我追踪到:
[headerView centerViewVertically:milesLabel pixelsFromRight:pointLabel.frame.size.width + 20];
我把它改为:
int x = pointLabel.frame.size.width;
[headerView centerViewVertically:milesLabel pixelsFromRight:x + 20];
它再次起作用。
答案 0 :(得分:1)
我遇到了这个错误,结果发现错误是我的,基本上是由类型-o引起的,或者更准确地说是一个粘贴-o。
我创建了两个标签并将它们添加到子视图中。代码基本上是这样的。
UILabel *pointsLabel = [[UILabel alloc] initWithFrame:ptsFrame];
...
[self addSubview:pointsLabel];
[pointsLabel release];
UILabel *typeLabel = [[UILabel alloc] initWithFrame:typeFrame];
...
[self addSubview:pointsLabel];
[typeLabel release];
请注意,在第二个addSubview
中我添加了pointsLabel
,即使我已经发布了它(并且真的是要添加typeLabel
)。我希望这也会导致运行时错误,但无论出于何种原因,它都会导致上面描述的总线错误。需要寻找的东西。
答案 1 :(得分:1)
我刚刚发生这种情况(不是第一次)。我仍然没有弄清楚究竟是什么导致了问题,但它将为模拟器编译,但不是为设备编译。将我的[[array alloc] init]从我的init方法中移出并进入一个单独的设置方法来修复问题。
也许我会在太短的时间内分配太多内存?这似乎不太可能,因为有几个[[array alloc] init]数组设置在我尝试添加之前和之后完成。所有内容都完全相同于其他数组的完成情况,为什么它是一个问题这次我还不明白。
答案 2 :(得分:1)
在xcode执行了我的代码的现代化之后,我也遇到了这个错误。我在项目和目标构建设置中将编译器切换到Apple LLVM 2.1并再次运行。这引起了一些流浪;在项目中,错误总线错误消失了。
答案 3 :(得分:0)
你是否解除了像otherView这样的任何对象,我很确定在xcode中会产生一个总线错误。
答案 4 :(得分:0)
对我来说,真的看起来像编译错误。
我遇到了同样的问题(Xcode 4.0.2; LLVM GCC 4.2)。在视图控制器的viewDidLoad中,我有一行:
self.title = @"Enter your details";
我不再需要这一行,所以我将其删除,后续版本因“内部编译错误:总线错误”而失败。如果不是删除行,而是将其更改为:
self.title = nil;
构建编译正常。
详细的构建日志包含:
MyViewController.m:316: internal compiler error: Bus error
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
{standard input}:0:End-of-File not at end of a line
{standard input}:1704:End-of-File not at end of a line
{standard input}:unknown:Partial line at end of file ignored
{standard input}:1695:non-relocatable subtraction expression, "L_OBJC_CLASSLIST_REFERENCES_$_6" minus "LPC11_18"
{standard input}:1695:symbol: "L_OBJC_CLASSLIST_REFERENCES_$_6" can't be undefined in a subtraction expression
{standard input}:1692:non-relocatable subtraction expression, "L_OBJC_SELECTOR_REFERENCES_36" minus "LPC11_17"
{standard input}:1692:symbol: "L_OBJC_SELECTOR_REFERENCES_36" can't be undefined in a subtraction expression
[... any many more lines like this ...]
答案 5 :(得分:0)
我通过下一行代码得到了同样的错误:
tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;
加倍同一行代码并没有出错:
tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;
tempButton.titleLabel.adjustsFontSizeToFitWidth = YES;
答案 6 :(得分:0)
我在项目中遇到此问题,但仅在编译设备时才遇到。当我为模拟器构建时它工作正常。
我能够通过在项目的构建设置中将编译器从“LLVM GCC 4.2”更改为“LLVM Compiler 2.0”来解决此问题。
我不得不认为这是一个编译错误。不应该是语法上有效但语义错误的代码会导致编译器错误的情况。编译器不执行代码,只是编译它。因此,如果您在那里遇到逻辑或内存管理错误,那么编译器并不关心这些事情。
答案 7 :(得分:0)
您是否使用任何已弃用的功能?
我删除了对已弃用功能的所有调用并且有效!