Objective c if语句在设置其条件变量之前执行
我有一个Objective c if语句在设置其条件变量之前执行,objective-c,ios,xcode,uistoryboard,Objective C,Ios,Xcode,Uistoryboard,我有一个if语句,它的条件通过NSUserDefaults传递给这个实现文件,如下所示 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *code = [defaults objectForKey:@"codeKey"]; selectedCodeLocal = code; 在这段检索字符串变量的代码之后,我有一个if语句: if (selectedCodeLocal == @"1")
if
语句,它的条件通过NSUserDefaults
传递给这个实现文件,如下所示
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *code = [defaults objectForKey:@"codeKey"];
selectedCodeLocal = code;
在这段检索字符串变量的代码之后,我有一个if语句:
if (selectedCodeLocal == @"1")
textView.text = "@blah blah blah";
else
textview.text = "@abcdefghijklmnop";
当我构建并运行时,似乎正在传递变量,但直到执行if
语句之后才传递它
我在这段代码周围放置了NSLog
,返回我的selectedCodeLocal
字符串变量,变量的值总是落后一步。(例如,如果我首先将其传递为4,然后将其传递为1,它将在日志中首先返回为1,然后返回为4,然后返回为1)抱歉,如果我把您弄糊涂了
更新:
- (void)viewDidLoad {
[super viewDidLoad];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
selectedCodeLocal = [defaults objectForKey:@"codeKey"];
NSLog(@"set: %@",selectedCodeLocal);
self.navigationItem.title = selectedCodeLocal;
[textView setClipsToBounds:NO];
[textView setEditable:NO];
[textView setFrame:CGRectMake(20, 100, 50, 50)];
if ([selectedCodeLocal isEqualToString:@"100"])
textView.text = @"abc";
else
textView.text = @"xyz";
}
NSLog仍然显示selectedCodeLocal
的旧值
更新:这里是设置该键的地方。(在前面的视图中)
@菲罗兹·拉菲尔:这能回答你的问题吗?
我想你的问题在于你最喜欢的字符串比较 我想你的意思是:
if ([selectedCodeLocal isEqualToString:@"1"])
或者类似的东西(我写Obj-C已经有一年多了)。我想你的问题是最受欢迎的字符串比较 我想你的意思是:
if ([selectedCodeLocal isEqualToString:@"1"])
或者类似的东西(我写Obj-C已经一年多了)。当您更改NSUserDefaults中的值时,请执行同步。比如说
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"4" forKey:@"codeKey"];
[defaults synchronize];
也
应该是
if (selectedCodeLocal isEqual:@"1")
更改NSUserDefaults中的值时,请执行同步。比如说
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"4" forKey:@"codeKey"];
[defaults synchronize];
也
应该是
if (selectedCodeLocal isEqual:@"1")
在加载并推送新的视图控制器后,如果将情节提要和序列连接到tableview单元格,则会调用
tableview:DidSelectRowatineXpath
换句话说,在您已经读取值之后,您将在用户的默认值中设置此键
在tableview控制器上的prepareforsgue:sender:
方法中,可以设置详细视图控制器所需的任何数据<代码>表视图:如果您在情节提要中的表视图上使用序列,则didSelectRowAtIndexPath:太晚
其他想法:
- 其他人都认为您应该使用
,而不是IsequalString:
。后者为您工作这一事实实际上是执行过程中的一个意外。你需要做正确的事情,而不是依赖它。使用“==”(在本例中是指针比较)是错误的=
说到做正确的事情,你应该考虑<代码> >选择代码<代码>是否真正属于你的用户偏好(NSULDER错误)。只需将该属性设置为detail view控制器的@property,并直接在
prepareforsgue:sender:
方法中设置该属性,就会更简洁
希望对您有所帮助。在加载和推送新的视图控制器后,您的
tableview:didSelectRowAtIndexPath
将被调用
换句话说,在您已经读取值之后,您将在用户的默认值中设置此键
在tableview控制器上的prepareforsgue:sender:
方法中,可以设置详细视图控制器所需的任何数据<代码>表视图:如果您在情节提要中的表视图上使用序列,则didSelectRowAtIndexPath:太晚
其他想法:
- 其他人都认为您应该使用
,而不是IsequalString:
。后者为您工作这一事实实际上是执行过程中的一个意外。你需要做正确的事情,而不是依赖它。使用“==”(在本例中是指针比较)是错误的=
说到做正确的事情,你应该考虑<代码> >选择代码<代码>是否真正属于你的用户偏好(NSULDER错误)。只需将该属性设置为detail view控制器的@property,并直接在
prepareforsgue:sender:
方法中设置该属性,就会更简洁
希望能有所帮助。这似乎是编写if语句条件的更好方法,尽管
=
和IsequalString:
都可以工作,但它仍然不能解决变量未及时设置的问题。还有其他想法吗?IsequalString:
不是编写if语句的“更好”方法。这是正确的方法。相等运算符,==
,将测试两个指针是否指向同一个对象。使用字符串时很少出现这种情况。方法isEqualToString:
实际上比较了指针的内容,在大多数情况下,这是您可能想要做的。这似乎是编写if语句条件的更好方法,尽管==
和isEqualToString:
都可以工作,但它仍然不能解决我的变量设置不及时的问题。还有其他想法吗?IsequalString:
不是编写if语句的“更好”方法。这是正确的方法。相等运算符,==
,将测试两个指针是否指向同一个对象。使用字符串时很少出现这种情况。方法isEqualToString:
实际上比较指针的内容,在大多数情况下,这是您可能想要做的。if语句工作正常,谢谢。但是NSUserDefaults
似乎仍然没有及时设置字符串变量selectedCodeLocal
。一个简单的问题是,如果您直接操作它,为什么需要使用NSUserDefaults?目前,我看不出代码有任何问题,也许如果你能发布更多的代码,我将从另一个视图传递一个字符串,这就是我使用NSUserDefaults
的原因。该字符串将决定(通过if语句)如何设置UITextView的文本属性