【问题标题】:Use Xcode5.1 beta5 or deploy using xcode 5.0.2?使用 Xcode5.1 beta5 还是使用 xcode 5.0.2 部署?
【发布时间】:2014-02-26 06:04:49
【问题描述】:

当我安装这个新的 Xcode 时,我在这个 Xcode 5.1 beta 5 中收到了一些警告。

NSInteger 类型的值不应用作格式参数;改为向long 添加显式转换

NSString *时间; NSInteger 小时; 时间 = [@"" stringByAppendingString:[NSString stringWithFormat:@"%d",hour]];

并告诉我用@"%02ld"@"%ld" 替换它

time = [time stringByAppendingString:[NSString stringWithFormat:@"%02ld",(long)minute]];

当我使用 Xcode 5.0.2 时它运行良好。

那么我们可以通过 Xcode 5.1 beta 5 到 IOS 7.1 beta,7.1,6.1 发布应用程序,以便在设备上进行测试并在 App Store 上进行测试吗?

我应该使用 Xcode 5.0.2 并使用最终版本(非 beta)并等待 Xcode 5.1 的最终版本。

附:我想第一次在设备上测试我的应用程序,并将首次在商店中发布应用程序..

【问题讨论】:

标签: ios xcode ios7


【解决方案1】:

您无法使用 Xcode 测试版提交到应用商店。您必须使用 Xcode 5.0.2 构建您的发布二进制文件。

也就是说,您应该修复这些警告。仅仅因为 Xcode 5.0 没有警告你它们并不意味着它们永远是对的。

【讨论】:

  • 所以要让 int/NSInteger 用作 NSString,我需要将所有 int/NSIntegers 转换为 @"%ld"(long double) 对吗?
  • @JayminRaval:只有 NSInteger/NSUInteger,因为那是 32 位或 64 位,具体取决于架构(请参阅上面评论中的链接)。您不必投射int
  • ok @MartinR 我在指南中看到 Xcode 支持 32 位和 64 位版本,那么我在哪里可以检查我的项目是 32 位还是 64 位?我应该为 64 位还是 32 位构建,哪个更好?在 64 位和 %d 中需要长双重转换,%i 按照上述链接在 32 位上工作。
  • @JayminRaval 如果您的应用是为 armv7s 构建的,它是 64 位的。
  • @JayminRaval:您可以在“构建设置”的“架构”中包含或排除 64 位。 - 64位代码可以有性能优势,更多信息请参见“64位转换指南”。
【解决方案2】:

在这种情况下编译 64 位和 32 位是有区别的。

在 64 位 NSInteger 中是 64 位值:typedef long NSInteger 在 32 位 NSInteger 中是一个 32 位的值:typedef int NSInteger

所以当编译为 32 位时,%02d 很好。编译 64 位时,编译器需要 %02ld 以获得更宽的值。解决此问题的方法是使用 %02ld 并将值转换为 long ,如第二个代码块中所示。如果使用 NSUInteger 强制转换为 unsigned long。

您可以在 Apple 的这些 iOS 文章中了解更多相关信息:

String Format Specifiers

64-bit Transition Guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多