相关疑难解决方法(0)

NSInteger的NSLog/printf说明符?

A NSInteger在32位平台上为32位,在64位平台上为64位.是否有一个NSLog总是匹配大小的说明符NSInteger?

建立

  • Xcode 3.2.5
  • llvm 1.6编译器(这很重要; gcc不这样做)
  • GCC_WARN_TYPECHECK_CALLS_TO_PRINTF 打开

这让我有些悲伤:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSInteger i = 0;
        NSLog(@"%d", i);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于32位代码,我需要说明%d符.但是,如果我使用说明%d符,我在编译64位时会收到警告,建议我使用%ld.

如果我使用%ld匹配64位大小,编译32位代码时,我会收到警告,建议我使用%d.

如何一次修复这两个警告?是否有我可以使用的说明符?

这也影响[NSString stringWithFormat:]和[[NSString alloc] initWithFormat:].

cocoa objective-c nslog nsinteger 32bit-64bit

126
推荐指数
1
解决办法
7万
查看次数

OCUnit中的简化断言

我刚刚开始使用OCUnit并发现断言有点麻烦.在JUnit中,我可以编写一个测试来比较下面的数字.这个测试显然会失败,但这显示了一个很好的,简单的断言,我可以写两个数字和我得到的反馈:"预期<2>但是<3>",代码非常少.

替代文字http://i49.tinypic.com/2aeo8kn.png

我到目前为止尝试的是XCode:

替代文字http://i48.tinypic.com/25kj1x2.png

哪个有效,但不如JUnit那么优雅.你知道它是否存在断言宏alàJUnitfor XCode(OCUnit)?此外,是否可以在XCode中获得红色/绿色条?

xcode unit-testing objective-c ocunit

3
推荐指数
1
解决办法
2676
查看次数