这是示例代码:
NSDictionary *myDictionary = [NSDictionary dictionary];
NSNumber *myNumber = [myDictionary valueForKey: @"MyNumber"];
NSLog(@"myNumber = %@", myNumber); // output myNumber = (null)
if (myNumber == nil)
NSLog(@"test 1 myNumber == nil");
if (myNumber == NULL)
NSLog(@"test 2 myNumber == NULL");
if ([myNumber isEqual:[NSNull null]])
NSLog(@"test 3 myNumber == [NSNull null]");
Run Code Online (Sandbox Code Playgroud)
我什么时候应该使用nil,NULL和[NSNull null]?
我想知道的区别nil,NIL和null.我用Google搜索了一下,发现了这个:
nil - >指向Objective-C对象的null指针
NIL - >指向Objective-C类的null指针
null - > null指向原始类型或缺少数据的指针
但我无法清楚地理解术语"Objective-C对象"和"类".
请向我解释一下.此外,有没有像任何文字NSNull或NSNil在Objective-C?如果是这样,那么请解释它的用途.
I am getting an array with null value. Please check the structure of my array below:
(
"< null>"
)
Run Code Online (Sandbox Code Playgroud)
When I'm trying to access index 0 its crashing because of
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x389cea70
Run Code Online (Sandbox Code Playgroud)
Currently its crashing because of that array with a crash log:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x389cea70'
*** First throw call stack:
(0x2d9fdf53 0x3820a6af 0x2da018e7 0x2da001d3 0x2d94f598 0x1dee57 0x1dfd31 0x302f598d …Run Code Online (Sandbox Code Playgroud) 我有一段代码检测如果NSString是NULL,nil等等.然而,它崩溃.这是我的代码:
NSArray *resultstwo = [database executeQuery:@"SELECT * FROM processes WHERE ready='yes' LIMIT 0,1"];
for (NSDictionary *rowtwo in resultstwo) {
NSString *getCaption = [rowtwo valueForKey:@"caption"];
if (getCaption == NULL) {
theCaption = @"Photo uploaded...";
} else if (getCaption == nil) {
theCaption = @"Photo uploaded...";
} else if ([getCaption isEqualToString:@""]) {
theCaption = @"Photo uploaded...";
} else if ([getCaption isEqualToString:@" "]) {
theCaption = @"Photo uploaded...";
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
因未捕获的异常而终止应用'
NSInvalidArgumentException',原因:'-[NSNull isEqualToString:]:无法识别的选择器发送到实例 …
这是我看到的上下文:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
Run Code Online (Sandbox Code Playgroud)
为什么不在那个地方零?
我有一个NSDictionary来自API服务器的JSON响应.有时候这个字典中的键的值是Null
我试图获取给定的值并将其放入表格单元格的详细文本中以供显示.
问题在于,当我试图将值强制转换NSString为崩溃时,我认为这是因为我试图强制Null转换为字符串.
这样做的正确方法是什么?
我想做的是这样的:
cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString
Run Code Online (Sandbox Code Playgroud)
这是一个字典的例子:
Printing description of sensor:
{
"created_at" = "2012-10-10T22:19:50.501-07:00";
desc = "<null>";
id = 2;
"latest_value" = "<null>";
name = "AC Vent Temp";
"sensor_type" = temp;
slug = "ac-vent-temp";
"updated_at" = "2013-11-17T15:34:27.495-07:00";
}
Run Code Online (Sandbox Code Playgroud)
如果我只需要在条件中包装所有这些,那很好.我只是无法弄清楚条件是什么.回到Objective-C世界,我会比较,[NSNull null]但这似乎不适用于Swift.
我正在为我的属性设置值NSManagedObject,这些值NSDictionary来自JSON文件中的正确序列化.我的问题是,当某个值是[NSNull null],我不能直接分配给属性:
fight.winnerID = [dict objectForKey:@"winner"];
Run Code Online (Sandbox Code Playgroud)
这引发了一个 NSInvalidArgumentException
"winnerID"; desired type = NSString; given type = NSNull; value = <null>;
Run Code Online (Sandbox Code Playgroud)
我可以轻松检查值[NSNull null]并指定nil:
fight.winnerID = [dict objectForKey:@"winner"] == [NSNull null] ? nil : [dict objectForKey:@"winner"];
Run Code Online (Sandbox Code Playgroud)
但我认为这不是很优雅,而且要设置很多属性会变得混乱.
此外,在处理NSNumber属性时,这会变得更难:
fight.round = [NSNumber numberWithUnsignedInteger:[[dict valueForKey:@"round"] unsignedIntegerValue]]
Run Code Online (Sandbox Code Playgroud)
现在NSInvalidArgumentException是:
[NSNull unsignedIntegerValue]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我必须[dict valueForKey:@"round"]在制作NSUInteger它的价值之前进行治疗.一线解决方案消失了.
我尝试创建一个@try @catch块,但只要捕获到第一个值,它就会跳转整个@try块,并忽略下一个属性.
是否有更好的方法来处理[NSNull null]或者使这个完全不同但更容易?
其实我的问题是:是null和nil等价的?
我有一个例子,但是当他们不相同时我很困惑.
NSNull *nullValue = [NSNull null];
NSArray *arrayWithNull = [NSArray arrayWithObject:nullValue];
NSLog(@"arrayWithNull: %@", arrayWithNull);
id aValue = [arrayWithNull objectAtIndex:0];
if (aValue == nil) {
NSLog(@"equals nil");
} else if (aValue == [NSNull null]) {
NSLog(@"equals NSNull instance");
if ([aValue isEqual:nil]) {
NSLog(@"isEqual:nil");
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,在上述情况下,它表明,无论null和nil不相等并显示"等于NSNull实例"
NSString *str=NULL;
id str1=nil;
if(str1 == str)
{
printf("\n IS EQUAL........");
}
else
{
printf("\n NOT EQUAL........");
}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,它显示两者相等,并显示"IS EQUAL".
任何人的帮助将不胜感激.
谢谢Monish.
我正在开发一个iPhone应用程序,我需要使用JSON它从服务器接收数据.在iPhone方面,我将数据转换为NSMutableDictionary.
但是,日期类型数据为空.
我用下面的句子来读日期.
NSString *arriveTime = [taskDic objectForKey:@"arriveTime"];
NSLog(@"%@", arriveTime);
if (arriveTime) {
job.arriveDone = [NSDate dateWithTimeIntervalSince1970:[arriveTime intValue]/1000];
}
Run Code Online (Sandbox Code Playgroud)
当arrivalTime为null时,如何创建if语句.我试过[到达时间长度]!= 0,但我不工作,因为arriTime是一个NSNull并且没有这个方法.
下面是一个代码块,应该测试以查看字典是否为空,如果不是,则拉出正确的对象.但是,出于某种原因,尽管if检查失败,代码仍然执行.是否有一些关于NSNull我不理解的作品的怪癖,或者这是一个苹果虫?
if (svcUser && !(svcUser == (id)[NSNull null])) {
return [svcUser objectForKey:@"access_level"];
}
Run Code Online (Sandbox Code Playgroud)
控制台响应:
(lldb) print svcUser && !(svcUser == (id)[NSNull null])
(bool) $0 = false
(lldb) continue
-[NSNull objectForKey:]: unrecognized selector sent to instance 0x2b51678
Run Code Online (Sandbox Code Playgroud)