App Store代码与iPhone 3G上的Xcode / Device代码不同

时间:2011-10-12 11:45:23

标签: iphone objective-c ios cocoa-touch uitableview

我不确定如何解释这一个。我昨天向商店提交了我的一个应用程序的更新。 第一个屏幕截图是我在iPhone 3G上运行的一个特定屏幕运行的方式,运行iOS 4.2.1,从App Store下载:

下面的第二张图片完全相同的代码,自原始提交以来没有进行任何更改,在通过Xcode连接的完全相同的设备上运行。

应用程序在我的iPhone 4上正常运行,运行iOS 5,从App Store下载。所以回顾一下:

  1. 从App Store获得的应用程序在iPhone 3G上有缺陷
  2. 从App Store获得的应用程序在iPhone 4上良好
  3. 通过Xcode捆绑的应用程序在iPhone 3G上良好
  4. 这些不是唯一的图形不一致,但它们都与自定义UITableViewCell代码有关,除了在每个目录中按几个像素标记之外,它没有做任何事情,并且从第一天起就一直运行良好。我已经用idp-dts提交了一份报告,我正在等待他们的回复,但由于候补名单通常是一周或更长时间,我宁愿自己解决这个问题。

    非常感谢任何帮助/提示/猜测!

    iPhone 3G运行我的应用程序的App Store版本:

    enter image description here

    iPhone 3G运行我的应用程序的Xcode系留版本:

    enter image description here

    编辑:这听起来与此问题非常相似:Building with LLVM and any optimization causes app to crash on startup与我联系的客户使用的是第二代iPod Touch,除了使用armv6的iPhone 3G之外的唯一其他硬件

    编辑2:以下是设置左侧颜色条边界的代码片段。代码中似乎没有任何可疑的东西:

    - (void)layoutSubviews {
        CGRect colorViewFrame = self.bounds;
        colorViewFrame.size.width = 6;
        colorViewFrame.origin.y += 3;
        colorViewFrame.origin.x -= 1;
        colorViewFrame.size.height -= 8;
    
        colorView.frame = colorViewFrame;
        ...
    }
    

4 个答案:

答案 0 :(得分:7)

所以这是我在Build Settings下找到的:

enter image description here

在编译器优化中采用了一两个类是有道理的。设备上的代码调试应保持其原始状态以进行调试,并且应针对速度和效率优化发布的代码。

所以这是有趣的部分。将我的调试设置更改为最快,最小:

enter image description here

在Xcode中运行系留时导致问题在我的设备上发生。

在提交雷达或做出任何草率决定并向App Store提交非优化代码之前,还有什么我应该考虑调查的吗?编译器优化是否真的是布局问题的根本原因?

编辑如果优化级别是问题,为什么优化的代码在我的iPhone 4上正常运行,但在我的iPhone 3G上运行不正确?

编辑2:此问题与此答案非常相似:Building with LLVM and any optimization causes app to crash on startup

编辑3:从Apple Radar回复,这是一个众所周知的问题。将在未来版本的Xcode中修复。感谢所有帮助人员!

答案 1 :(得分:1)

我遇到了同样的问题,并找到了问题的解决方法。

我在优化和未经优化的代码上做了一些NSLog之后发现CGSize在第一次访问height参数后变得腐败。

所以这段代码在我的UITableViewCell子类layoutSubviews中:

  NSLog(@"size.height %f", size.height);
  NSLog(@"2nd access size.height %f", size.height);
  _titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,size.height);
  NSLog(@"after setFrame size.height %f", size.height);

在日志中提供以下内容:

  

size.height 19.000000

     

第二次访问size.height 56.00000

     

在setFrame size.height 56.00000之后

所以,我的解决方法是使用中间高度标识符:

CGFloat height = size.height; 
NSLog(@"size.height %f", size.height);
_titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,height);
NSLog(@"after setFrame size.height %f", size.height);

一切都很好......

我认为不像关闭优化一样安全,但我的应用程序的其余部分似乎很好......总是最好用发布版本进行测试!

答案 2 :(得分:0)

如果要在表格视图单元格中添加和布置视图,则应将其添加到单元格的contentView中,并在所有布局代码中使用self.contentView.bounds而不是self.bounds

需要来呼叫[super layoutSubviews]否则会发生许多奇怪的事情。

答案 3 :(得分:0)

答案是为armv6编译添加编译器标志-mno-thumb,而不是为armv7编译添加它。

如何使用:Is there a way to compile for ARM rather than Thumb in Xcode 4?