我的应用程序在设备的调试模式下工作正常。我将应用程序发送到App Store,除iPhone 3G外,它运行正常。
我的测试(调试)设备是iPhone 3G,它在调试中运行良好,但是当我下载应用程序并通过App Store安装它时,它也无法在我的iPhone上运行。
我在代码中有一些NSLog,并认为这可能是问题,但即使在删除NSLog之后,iPhone 3G也会发生同样的事情。
问题是我使用以下代码:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
mouseSwiped = YES;
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
currentPoint.y -= 20;
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
}
并且在iPhone 3G上这不正确。它只是做水平线。这在其他设备上运行良好。
这里可能出现什么问题?
答案 0 :(得分:3)
在Xcode 4.2中,LLVM编译器存在一个已知错误,当在ARMv6体系结构上使用CGPoints等时会导致错误的结果。这在this thread on the Apple Developer Forums中有详细说明。 ARMv6是用于iPhone 3G之前的设备(例如你的iPhone 3G),这就是你在那里看到它的原因。
该错误与应用程序的ARMv6版本的错误Thumb代码生成有关。我在回答here中描述了如何选择性地禁用Thumb以用于旧架构(同时保留未受影响的ARMv7构建的性能)。
有些人说Xcode 4.2.1有一个固定版本的LLVM可以解决这个问题,但我无法确认。在this Apple Developer Forum thread末尾附近阅读gparker的评论看看这个问题已经解决了。
答案 1 :(得分:2)
我遇到过类似的问题。我发现很多这样的麻烦都是由Xcode针对armv6架构进行的错误优化引起的。
In" Build Settings" - > " Apple LLMV编译器3.0 - 代码生成" - > "优化等级"你肯定有发布版本的优化设置。更改它并将其设置为NONE,因为调试版本是肯定的。
就是这样。如果问题是我认为的那样,那就是解决方案。您可以测试此解决方案构建Adhoc应用程序。