您的位置:华清远见教育科技集团 >> iOS资料 >> iOS应用程序开发教程:十、排除故障和检查代码  
 
iOS应用程序开发教程:十、排除故障和检查代码
分享到:

按照之前九章iOS应用程序开发教程操作到这里,如果你的应用程序不能正确工作,请尝试本文描述的解决问题方法。如果应用程序仍然不能正确工作,你可以把你自己的代码与本文末尾给出的清单进行比较。

代码和编译器警告

代码编译时应该不会有任何警告。如果真的收到警告,就很有可能是代码出错了。因为 Objective-C 是一种非常灵活的程序设计语言,有时候编译器给出的也仅仅是一些警告而已。

检查串联图文件

如果程序未能正确工作,开发者会很自然地去检查源代码来找出错误。但使用 Cocoa Touch,又增添了另一个层面。应用程序的大部分配置可能是"编码"在串联图中。例如,如果连接不正确,应用程序的行为就会与你的期望不符。

·如果点按按钮时文本没有更新,可能是没有将按钮的操作连接到视图控制器,或是没有将视图控制器的 outlet 连接到文本栏或标签。

·如果点按"Done"按钮时键盘不消失,可能是没有将文本栏的委托连接好,或者把视图控制器的 textField Outlet 连接到了文本栏。务必在串联图上检查文本栏的连接:按住 Control 键点按文本栏以显示半透明的连接面板。你应该会在 delegate outlettextField 引用 outlet 的旁边,看到带有填充的圆圈。

如果你已连接了委托,可能有更微妙的问题(请参阅下一部分"委托方法的名称")。

委托方法的名称

与委托有关的一个常见错误是拼错委托方法的名称。即使已经正确设定了委托对象,但是如果委托未在其方法实现中使用正确的名称,则不会调用正确的方法。通常好的做法是从文稿中拷贝和粘贴委托方法声明(例如 textFieldShouldReturn:)。

代码清单

这一部分提供 HelloWorldViewController 类的接口和实现文件的代码清单。请注意,该清单并未列出 Xcode 模板提供的注释和其他方法的实现。

接口文件:HelloWorldViewController.h

#import <UIKit/UIKit.h>

    @interface HelloWorldViewController :UIViewController <UITextFieldDelegate>

    @property (copy, nonatomic) NSString *userName;

    @end

实现文件:HelloWorldViewController.m

#import "HelloWorldViewController.h"

    @interface HelloWorldViewController ()

    @property (weak, nonatomic) IBOutlet UITextField *textField;
    @property (weak, nonatomic) IBOutlet UILabel *label;

    - (IBAction)changeGreeting:(id)sender;

    @end

    @implementation HelloWorldViewController

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }

    - (IBAction)changeGreeting:(id)sender {

        self.userName = self.textField.text;

        NSString *nameString = self.userName;
        if ([nameString length] == 0) {
            nameString = @"World";
        }
        NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
        self.label.text = greeting;
    }

    - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

        if (theTextField == self.textField) {
            [theTextField resignFirstResponder];
        }
        return YES;
    }

    @end

 更多相关文章

·iOS 应用程序开发教程:九、实施视图控制器
·iOS 应用程序开发教程:八、让应用程序具有辅助功能
·iOS 应用程序开发教程:七、建立文本栏的委托连接
·iOS 应用程序开发教程:六、为文本栏和标签创建 Outlet
·iOS 应用程序开发教程:五、为按钮创建操作