2011-12-21 47 views
1

我有一个在设备上的调试模式下正常工作的应用程序。我将应用程序发送到App Store,除iPhone 3G外,它工作正常。从App Store下载时,为什么我的应用程序在iPhone 3G上绘制不正确?

我的测试(调试)设备是一个iPhone 3G,它在调试中工作得很好,但是当我下载应用程序并通过App Store安装它时,它在我的iPhone上也不起作用。

我在代码中有一些NSLogs,并认为这可能是问题,但即使删除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,这并不正确绘制。它只是使水平线。这适用于其他设备。

这里可能会出现什么问题?

回答

3

Xcode 4.2中的LLVM编译器存在一个已知的错误,当在ARMv6体系结构上使用CGPoint等时导致错误结果。详情请见this thread on the Apple Developer Forums。 ARMv6是用于iPhone 3GS之前的设备(例如iPhone 3G)的,所以这就是为什么你会在那里看到它。

该错误与您的应用程序的ARMv6版本的错误代码生成有关。我在我的回答here中描述了如何选择性地禁用Thumb以适应较旧的体系结构(同时保留未受影响的ARMv7构建的性能)。

有人说Xcode 4.2.1有一个固定版本的LLVM来解决这个问题,但我无法证实这一点。 阅读gparker的评论,在this Apple Developer Forum thread的末尾附近查看此问题的解决方法。

+0

非常感谢!这是帮助我的答案!我把armv6和armv7调试并释放,它对二进制文件起作用!再次感谢! – iPhoneNoob 2011-12-21 22:28:58

+0

对不起,我是新来的所以我不知道如何接受'直到现在:) – iPhoneNoob 2012-01-21 15:41:09

2

我遇到过类似的问题。我发现很多类似的麻烦源于Xcode为armv6架构所做的错误优化。

在“Build Settings” - >“Apple LLMV Compiler 3.0 - 代码生成” - >“优化级别”中,您肯定会有发布版本的优化设置。更改它并将其设置为NONE,因为调试版本是肯定的。

就是这样。如果问题出在我认为的问题上,那就是解决方案。您可以测试这个解决方案构建Adhoc应用程序。

+0

感谢您的提示!我会试试看,让你知道! – iPhoneNoob 2011-12-21 15:00:07

+2

我遇到了与armv6代码相同的问题。在Xcode中,您可以为每个文件设置优化级别,因此您不必为整个应用程序禁用优化。 'Your Target' - >'Build Phases' - >'Compile Sources'那里有一个'Compiler Flags'列,只需将它设置为-O0就可以解决问题。 – V1ru8 2011-12-21 15:24:24

相关问题