Я пытаюсь создать метод, который проверяет наличие нулевой / нулевой / пустой строки, и я пытаюсь заставить его работать как категорию, но безуспешно.
Я использую этот код на основе ответов в эта тема:
@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
, я получаю false.