我在我的iPhone应用程序中使用它
if (title == nil) {
// do something
}
但它抛出一些异常,控制台显示标题为“(null)”。
所以我现在正在使用它:
if (title == nil || [title isKindOfClass:[NSNull class]]) {
//do something
}
有什么区别,确定字符串是否为空的最佳方法是什么?
答案 0 :(得分:386)
正如其他人所指出的那样,在Cocoa / Objective C下有很多种类型的“null”。但还有一点要注意的是[title isKindOfClass:[NSNull class]]是无意义复杂的,因为[NSNull null]被记录在案成为单身人士,这样你就可以检查指针是否相等。请参阅Topics for Cocoa: Using Null。
所以一个好的测试可能是:
if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something";
请注意如何使用即使title为nil,title.length将返回0 / nil / false,在这种情况下为0,因此您不必特殊情况。这是Objective C新手的人难以习惯,特别是来自其他语言的消息/方法调用nil崩溃。
答案 1 :(得分:24)
就像
一样简单if([object length] >0)
{
// do something
}
请记住,在目标C中,如果object为null,则返回0作为值。
这将为您提供空字符串和0长度字符串。
答案 2 :(得分:6)
请参阅本网站上的以下相关文章:
我认为您的错误与其他内容有关,因为您不需要进行额外检查。
答案 3 :(得分:5)
所有这些“适合我的答案”是什么?我们都使用相同的语言进行编码,规则是
这对所有人都有用。如果给定的解决方案仅“适合您”,那只是因为您的应用程序流不允许引用可能为null或字符串长度为0的情况。执行此操作的正确方法是将处理的方法在所有情况下你想要什么。
答案 4 :(得分:5)
我发现为了真正做到正确,你最终不得不做类似于
的事情if ( ( ![myString isEqual:[NSNull null]] ) && ( [myString length] != 0 ) ) {
}
否则你会遇到奇怪的情况,控制权仍会绕过你的支票。我没有遇到一个超过isEqual
和长度检查的人。
答案 5 :(得分:4)
如果要对所有nil / empty对象(如空字符串或空数组/集)进行测试,可以使用以下命令:
static inline BOOL IsEmpty(id object) {
return object == nil
|| ([object respondsToSelector:@selector(length)]
&& [(NSData *) object length] == 0)
|| ([object respondsToSelector:@selector(count)]
&& [(NSArray *) object count] == 0);
}
答案 6 :(得分:3)
有两种情况:
对象可能是[NSNull null]
,或者是不可能的
您的应用程序通常不应使用[NSNull null];
,只有在想要将“ null ”对象放入数组或将其用作字典值时才使用它。然后你应该知道哪些数组或字典可能包含空值,哪些可能不包含空值
如果您认为数组永远不会包含[NSNull null]
值,则不要检查它。如果存在[NSNull null]
,则可能会出现异常,但这很好:Objective-C异常表示编程错误。并且您有一个编程错误,需要通过更改一些代码来修复。
如果某个对象可以为[NSNull null]
,那么您只需通过测试即可轻松检查
(object == [NSNull null])
。调用isEqual
或检查对象的类是无稽之谈。只有一个[NSNull null]
对象,普通的旧C运算符以最直接,最有效的方式检查它。
如果您检查的NSString
对象不是[NSNull null]
(因为您知道它不能是[NSNull null]
,或者您刚检查到它与[NSNull null]
不同,那么你需要问问自己如何处理空字符串,即长度为0的字符串。如果你认为它是null
字符串,如nil
,则测试(object.length == 0)
。object。如果object == nil
,则长度将返回0,因此此测试涵盖长度为0的nil对象和字符串。如果处理长度为0的字符串与nil字符串不同,只需检查是否object == nil
。
最后,如果要将字符串添加到数组或字典中,并且字符串可能为nil,则可以选择不添加它,将其替换为@""
,或将其替换为{{ 1}}。用[NSNull null]
替换它意味着你失去了区分“无字符串”和“长度为0的字符串”的能力。用@""
替换它意味着在访问检查[NSNull null]
对象的数组或字典时必须编写代码。
答案 7 :(得分:2)
这是我用于安全字符串而不是获取"(null)"的宏。 UILabel上的字符串,例如:
#define SafeString(STRING) ([STRING length] == 0 ? @"" : STRING)
假设您有一个成员类和名称属性,名称为nil:
NSLog(@"%@", member.name); // prints (null) on UILabel
with macro:
NSLog(@"%@", SafeString(member.name)); // prints empty string on UILabel
干净整洁。
答案 8 :(得分:2)
你只需检查nil
if(data[@"Bonds"]==nil){
NSLog(@"it is nil");
}
或
if ([data[@"Bonds"] isKindOfClass:[NSNull class]]) {
NSLog(@"it is null");
}
答案 9 :(得分:1)
尝试使用check null
if (text == nil)
答案 10 :(得分:1)
@interface NSString (StringFunctions)
- (BOOL) hasCharacters;
@end
@implementation NSString (StringFunctions)
- (BOOL) hasCharacters {
if(self == (id)[NSNull null]) {
return NO;
}else {
if([self length] == 0) {
return NO;
}
}
return YES;
}
@end
NSString *strOne = nil;
if([strOne hasCharacters]) {
NSLog(@"%@",strOne);
}else {
NSLog(@"String is Empty");
}
这适用于以下情况,NSString *strOne = @""
或NSString *strOne = @"StackOverflow"
或NSString *strOne = [NSNull null]
或NSString *strOne
。
答案 11 :(得分:1)
if(textfield.text.length == 0){
//do your desired work
}
答案 12 :(得分:0)
完整检查字符串的空条件可以是:< \ br>
if(mystring) { if([mystring isEqualToString:@""]) { mystring=@"some string"; } } else { //statements }
答案 13 :(得分:0)
如果还没有这种东西,你可以制作一个NSString类别:
@interface NSString (TrucBiduleChoseAdditions)
- (BOOL)isEmpty;
@end
@implementation NSString (TrucBiduleChoseAdditions)
- (BOOL)isEmpty {
return self == nil || [@"" isEqualToString:self];
}
@end
答案 14 :(得分:0)
我只用
检查空字符串if([myString isEqual:[NSNull null]])
答案 15 :(得分:0)
对我有用的是if ( !myobject )
答案 16 :(得分:0)
对于字符串:
+ (BOOL) checkStringIsNotEmpty:(NSString*)string {
if (string == nil || string.length == 0) return NO;
return YES;
}
请参考下图:
答案 17 :(得分:0)
对于字符串:
+ (BOOL) checkStringIsNotEmpty:(NSString*)string {
if (string == nil || string.length == 0) return NO;
return YES;}
答案 18 :(得分:-1)
if ([linkedStr isEqual:(id)[NSNull null]])
{
_linkedinLbl.text=@"No";
}else{
_linkedinLbl.text=@"Yes";
}
答案 19 :(得分:-1)
if ([strpass isEqual:[NSNull null]] || strpass==nil || [strpass isEqualToString:@"<null>"] || [strpass isEqualToString:@"(null)"] || strpass.length==0 || [strpass isEqualToString:@""])
{
//string is blank
}