【发布时间】:2012-03-31 08:17:38
【问题描述】:
我正在尝试创建一个检查 null/nil/空字符串的方法,并且我正在尝试让它作为一个类别工作,但没有运气。
我正在使用此代码,基于this topic 中的答案:
@implementation NSString (NSStringExtension)
- (BOOL)isNullOrEmpty {
return self == nil ||
self == (id)[NSNull null] ||
[@"" isEqualToString:self] ||
[[self stringByReplacingOccurrencesOfString:@" " withString:@""] length] == 0||
[self isEqualToString:@"(null)"]
|| ([self respondsToSelector:@selector(length)] && [(NSData *) self length] == 0)
|| ([self respondsToSelector:@selector(count)] && [(NSArray *) self count] == 0)
|| [[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0;
}
@end
然而,当我尝试使用它时,我得到了:
NSLog([@"" isNullOrEmpty] ? @"1":@"0"); // prints 1
NSString *s1 = nil;
NSLog([s1 isNullOrEmpty] ? @"1":@"0"); // prints 0
NSLog([args.itemName isNullOrEmpty] ? @"1":@"0"); // prints 0
NSLog([(NSString*)nil isNullOrEmpty] ? @"1":@"0"); // prints 0
这让我很困惑,我只能假设 iOS5/ARC 的某种组合导致 nil 对象被强制为空白字符串/指针。调试器将字符串显示为 0x0,但是当我使用 isNullOrEmpty 方法时,我得到了错误。
【问题讨论】:
标签: iphone objective-c ios null objective-c-category