Iphone 写入初始化为nil的NSDate将导致EXC\u错误\u访问

Iphone 写入初始化为nil的NSDate将导致EXC\u错误\u访问,iphone,objective-c,cocoa-touch,nsuserdefaults,exc-bad-access,Iphone,Objective C,Cocoa Touch,Nsuserdefaults,Exc Bad Access,在我的一种方法中,我试图用nil清除NSDate数据,并将其保存为默认值。当我试图保存它时,我的应用程序收到了“EXC\u BAD\u ACCESS” 然后崩溃 有什么想法吗? 也许还有另一种方法可以清除NSDate对象?为什么不直接使用 [userDefaults removeObjectForKey:@"yourdatekey"] 您可以(A)将[NSNull null]写入userDefaults,或者(B)仅从默认值中完全删除该值,而不是尝试将NIL写入userDefaults(这将不

在我的一种方法中,我试图用
nil
清除
NSDate
数据,并将其保存为默认值。当我试图保存它时,我的应用程序收到了“EXC\u BAD\u ACCESS” 然后崩溃

有什么想法吗?
也许还有另一种方法可以清除NSDate对象?

为什么不直接使用

[userDefaults removeObjectForKey:@"yourdatekey"]

您可以(A)将
[NSNull null]
写入userDefaults,或者(B)仅从默认值中完全删除该值,而不是尝试将NIL写入userDefaults(这将不起作用)

解决方案A:

[...]
id objectForDefaults = [NSNull null];
if (myDate != nil)
{
  objectForDefaults = myDate;
}
[userDefaults setObject:objectForDefaults forKey:@"mydate"];
[...]
[...]
NSDate *myDate = nil;
id objectFromDefaults = [userDefaults objectForKey:@"mydate"];
if (objectFromDefaults != [NSNull null])
{
  myDate = objectFromDefaults;
}
[...]
[userDefaults removeObjectForKey:@"mydate"]
然而,这就需要为你的应用程序添加更多的逻辑

存储:

[...]
id objectForDefaults = [NSNull null];
if (myDate != nil)
{
  objectForDefaults = myDate;
}
[userDefaults setObject:objectForDefaults forKey:@"mydate"];
[...]
[...]
NSDate *myDate = nil;
id objectFromDefaults = [userDefaults objectForKey:@"mydate"];
if (objectFromDefaults != [NSNull null])
{
  myDate = objectFromDefaults;
}
[...]
[userDefaults removeObjectForKey:@"mydate"]
检索:

[...]
id objectForDefaults = [NSNull null];
if (myDate != nil)
{
  objectForDefaults = myDate;
}
[userDefaults setObject:objectForDefaults forKey:@"mydate"];
[...]
[...]
NSDate *myDate = nil;
id objectFromDefaults = [userDefaults objectForKey:@"mydate"];
if (objectFromDefaults != [NSNull null])
{
  myDate = objectFromDefaults;
}
[...]
[userDefaults removeObjectForKey:@"mydate"]
解决方案B:

[...]
id objectForDefaults = [NSNull null];
if (myDate != nil)
{
  objectForDefaults = myDate;
}
[userDefaults setObject:objectForDefaults forKey:@"mydate"];
[...]
[...]
NSDate *myDate = nil;
id objectFromDefaults = [userDefaults objectForKey:@"mydate"];
if (objectFromDefaults != [NSNull null])
{
  myDate = objectFromDefaults;
}
[...]
[userDefaults removeObjectForKey:@"mydate"]

请在执行此操作的位置添加代码。“清除”然后“保存”也没有意义。我只是注意到发生这种情况是因为我试图将一个nil对象保存为默认值。是否可以在不使用nil的情况下清除nsdate?我仍然需要此nsdate,但在另一个位置为空您无法将nil写入NSUserDefaults-如果您下次调用objectForKey时使用上面的函数清除它,它将返回nil-这是否达到了目的?请记住,如果您需要另一个类中的日期,则只需让class属性保留原始NSDate对象即可。您不能将
NSNull
写入
NSUserDefaults