Iphone NSUserDefaults为空
我试图将一些数据保存在UIApplicationDelegate中的application:openURL:sourceApplication:annotation:method的NSUserDefaults中,然后在我的主视图控制器中的viewDidLoad:中读取这些数据。但是,数据总是空的 如果我在主视图控制器的viewDidLoad:中保存相同的数据,它将立即可见并可恢复,但在UIApplicationLegate中保存数据时却不是这样 你知道这种行为吗?多谢各位 代码如下:Iphone NSUserDefaults为空,iphone,nsuserdefaults,Iphone,Nsuserdefaults,我试图将一些数据保存在UIApplicationDelegate中的application:openURL:sourceApplication:annotation:method的NSUserDefaults中,然后在我的主视图控制器中的viewDidLoad:中读取这些数据。但是,数据总是空的 如果我在主视图控制器的viewDidLoad:中保存相同的数据,它将立即可见并可恢复,但在UIApplicationLegate中保存数据时却不是这样 你知道这种行为吗?多谢各位 代码如下: - (BO
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// Save my data
[[NSUserDefaults standardUserDefaults] setURL:url forKey:@"url"];
[[NSUserDefaults standardUserDefaults] synchronize];
return YES;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// It's always false !!
if ([[NSUserDefaults standardUserDefaults] URLforKey:@"url"] != nil){
// Do something with url
}
}
在代码中,您已在NSUserDefault中编程NSUrl。尝试使用NSString。(即[NSString stringWithFormat:@“%@”,url]) 所以它应该是
[[NSUserDefaults standardUserDefaults]setValue:[NSString stringWithFormat:@“%@”,url]forKey:@“url”];
最后,问题是viewDidLoad:在我的主视图中,控制器在application:openURL:sourceApplication:annotation:之前被调用,因此还没有存储任何值
我必须在其他地方检查NSUserDefault
谢谢你们的帮助 检查委托是否正在调用
-(BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
。仅当使用URL架构启动该委托时,才会调用该委托。@Till。没有。我已经对这个问题发表了评论。我在问他实现的委托是否正在调用。是否调用过保存?添加一个NSLog。是的,它正在调用该方法。如果我运行两次应用程序,那么它会工作,因为“url”键已正确保存。。。为什么主视图控制器第一次看不到此键?感谢您的时间。调用该方法是有原因的。如果它是针对NSStrings
的,那么它将被称为setString:forKey:
ohh!对不起。我想写setvalue。现在我已经编辑了我的答案。@ForamsetURL:
不是NSString
,而是NSURL
。在回答问题之前,请确认这种奇怪的行为是因为我没有使用故事板,我创建了自己的nib文件,从UIApplication委托以错误的方式加载它们。