Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 默认值不起作用。。。还是我?_Iphone_Objective C_Ios_Ios4_Ios5 - Fatal编程技术网

Iphone 默认值不起作用。。。还是我?

Iphone 默认值不起作用。。。还是我?,iphone,objective-c,ios,ios4,ios5,Iphone,Objective C,Ios,Ios4,Ios5,因此,我尝试在视图之间传递url。我在想,每当用户从tableview中进行选择时,下面的代码都会对@“url”中的任何内容进行踩踏。实际发生的情况是,第一个选择总是被返回,而且永远不会被践踏。嗯,也许是我?有什么想法吗?谢谢 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == 0) {

因此,我尝试在视图之间传递url。我在想,每当用户从tableview中进行选择时,下面的代码都会对@“url”中的任何内容进行踩踏。实际发生的情况是,第一个选择总是被返回,而且永远不会被践踏。嗯,也许是我?有什么想法吗?谢谢

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0)
    {
        [self saveToUserDefaults:@"http://url1"];
        [self.navigationController pushViewController:self.webController animated:YES];
    }
    else if (indexPath.row == 1)
    {
        [self saveToUserDefaults:@"http://url2"];
        [self.navigationController pushViewController:self.webController animated:YES];
    }
}

-(void)saveToUserDefaults:(NSString*)myString
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

    if (standardUserDefaults) 
    {
        [standardUserDefaults setObject:myString forKey:@"url"];
        [standardUserDefaults synchronize];
    }
}
在接收端:

-(NSString*)retrieveFromUserDefaults
{
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *val = nil;

    if (standardUserDefaults) 
        val = [standardUserDefaults objectForKey:@"url"];

    return val;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSString *url = self.retrieveFromUserDefaults;
    [self handleURLRequest:url];
}

将NSString保存到NSUserDefaults的代码看起来是正确的,应该覆盖为“url”键保存的任何值。在另一个视图中读取此值的方式可能存在错误?你能从下一个视图控制器发布你的代码吗


根据您的新代码,如果您保留第二个视图控制器,则可能需要将代码放入VIEWWILLISE而不是viewDidLoad。只有在最初从xib文件加载视图时才会调用viewDidLoad。如果弹出并重新推送视图控制器,则除非收到内存不足警告,否则不会再次执行该方法


将代码移动到
视图将出现
,这保证了每次视图出现时都会被调用

我想知道是不是NSUserDefaults保存在异步线程中(作为其内部实现的一部分),而推送的viewController重新读取值的速度太快,无法写入。在保存操作和推送操作之间加上一个小延迟或性能选择器:WithDelay:以确保正确。您是否在[standardUserDefaults setObject:myString forKey:@“url”]之前记录了myString?嗯。。。。我是新手,我不知道你在说什么。我添加了接收代码以供审核。也许问题就在那里。嗯。。我在想。。。我正在调用ViewDod load中的retrieveFromUserDefaults。是否每次我从上一个表中选择一个项目时都会调用该函数?请参阅下面我编辑的答案的第二部分…为什么使用self.retrieveFromUserDefaults而不是[self retrieveFromUserDefaults]?