iPhone 6、iOS 8.3 で奇妙な動作に遭遇しました。
appVersion は、渡される NSString* パラメータです。
NSLog(@"A:%@:%d",appVersion,(int)appVersion.length);
if (!appVersion)
NSLog(@"a");
if (appVersion == 0)
NSLog(@"b");
if (appVersion == nil)
NSLog(@"c");
if (appVersion == NULL)
NSLog(@"d");
if (appVersion == Nil)
NSLog(@"e");
if ([appVersion isEqual:[NSNull null]])
NSLog(@"f");
NSString* av = [NSString stringWithFormat:@"%@",appVersion];
if ([av isEqualToString:@"(null)"])
NSLog(@"g");
if (((int)appVersion) == 0)
NSLog(@"h");
if (appVersion) {
NSLog(@"B:%@:%d",appVersion,(int)appVersion);
params[@"appversion"] = appVersion;
}
アプリのリリース ビルドは次を返します。
A:(null):0
g
h
B:(null):0
そしてクラッシュします(「オブジェクトはnilにすることはできません(キー:appversion)」)。
デバッグ ビルドは次を返します。
a
b
c
d
e
g
h
nil ではなく nil とは何ですか?