Objective c 解析问题:仅在存档时才需要语句

Objective c 解析问题:仅在存档时才需要语句,objective-c,xcode,parsing,archive,expected-exception,Objective C,Xcode,Parsing,Archive,Expected Exception,只有在尝试存档我的XCode项目时,我才会收到解析问题预期语句错误。我没有收到此错误,当我定期构建应用程序而不是存档时,应用程序运行良好 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; if ([[[NSUserDefaults standardUserDefau

只有在尝试
存档
我的XCode项目时,我才会收到
解析问题
预期语句
错误。我没有收到此错误,当我定期构建应用程序而不是存档时,应用程序运行良好

    -(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = YES;

    if ([[[NSUserDefaults standardUserDefaults] objectForKey:SavedUsername] length] && [[[NSUserDefaults standardUserDefaults] objectForKey:SavedPassword] length]) {
        [self.btnRememberMe setSelected:YES];
        self.isButtonSelected = YES;
        self.txtFieldUsername.text = [[NSUserDefaults standardUserDefaults] objectForKey:SavedUsername];
        self.txtFieldPassword.text = [[NSUserDefaults standardUserDefaults] objectForKey:SavedPassword];

//        NSLog(@"username = %@ , pass = %@",[[NSUserDefaults standardUserDefaults] objectForKey:SavedUsername], [[NSUserDefaults standardUserDefaults] objectForKey:SavedPassword]);
        if ([self isAllFieldVerified])
            #ifdef DEBUG
                NSLog(@"all fields are verified");
            #endif
            //[self makeWebAPICallMethodCalling];
    }else {
        [self.btnRememberMe setSelected:NO];
        self.isButtonSelected = YES;
        self.txtFieldUsername.text = @"";
        self.txtFieldPassword.text = @"";
    }


}
解析器错误由
else
行引发…

问题在于
NSLog
语句的
#ifdef
。当您执行非调试构建时,
NSLog
行不在那里,留下一个
if
语句,其中没有代码

试试这个:

#ifdef DEBUG
    if ([self isAllFieldVerified])
        NSLog(@"all fields are verified");
#endif
或者至少添加大括号:

    if ([self isAllFieldVerified]) {
        #ifdef DEBUG
            NSLog(@"all fields are verified");
        #endif
    }

这就是为什么使用大括号总是一个好主意的例子,即使只有一行。

用括号括住嵌套的if语句,即if([self isAllFieldVerified]),然后重试。谢谢你的帮助。如果它不能在archiver上运行,为什么还要在我的iphone上编译和运行呢?正如我在回答的开头所说的,代码对调试版本有效,但对非调试版本无效。这就是
#ifdef DEBUG
行的全部要点。当您在iPhone上进行测试时,您正在进行调试构建,但当您进行归档时,您正在进行分发(非调试)构建。