第一个ios应用(5)

来源:互联网 发布:淘宝一千零一夜男厨师 编辑:程序博客网 时间:2024/05/08 19:00

如果你的应用仍然无法正常工作,请根据本章节来尝试进行故障排查。如果仍然无法找到错误,请按照本章节最后的代码清单和你的代码进行逐一比对。

代码和编译器警告

你的代码应该能够无警告并通过编译。如果发现有警告出现,建议你将它们当成错误来看待。因为 Objective-C 是个非常灵活的语言,有时候编译器顶多把一些地方判定成警告而不是错误。

检查故事板文件

作为一名开发者,如果发现有东西运行不正常,出于自然的直觉你大概会去检查源代码中的漏洞。但是在 Cocoa Touch 开发中,需要注意另一件事:你的应用中许多配置可能被“编码”到了故事板文件中。打个比方,如果你的连接不正确,应用也不会如预期那样正常工作。

  • 如果点按按钮后文字没有更新,则可能是按钮的动作没有和视图控制器正确连接,或者是视图控制器的插座变量没有和文本框或者标签正确连接。
  • 如果你点按 Done 按钮后键盘并未收回,则有可能是文本框的委托或者视图控制器的 textField 插座变量没有跟文本框正确连接。请务必检查故事板中文本框的连接情况:按住 Control 键并点按文本框,调出半透明的连接面板。你应该看到 delegate 插座变量以及 textField 引用旁边是带有填充的圆形。

    如果你确实连接了委托,那么可能存在某些更加微妙的问题(参看下边的“委托方法名称”)。

委托方法名称

委托中常见的一个错误就是拼错委托方法的名称。就算正确设定了委托对象,但是如果委托没有使用方法实现中的正确名称,则正确的方法就永远也不会被调用。最好的建议是从开发者文档中拷贝和粘贴委托方法的声明,比如 textFieldShouldReturn:

代码清单

在这个部分,HelloWorldViewController 类的接口和实现文件都被完全罗列出来。需要注意的是本代码清单不包含由 Xcode 模板提供的其他方法实现以及代码注释。

接口文件:HelloWorldViewController.h

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController <UITextFieldDelegate>

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

- (IBAction)changeGreeting:(id)sender;

@end

实现文件:HelloWorldViewController.m

#import “HelloWorldViewController.h”

@implementation HelloWorldViewController

@synthesize textField=_textField;
@synthesize label=_label;
@synthesize userName=_userName;

 
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    if (theTextField == self.textField) {
        [theTextField resignFirstResponder];
    }
    return YES;
}

- (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;
}
@end

转自:http://www.guomii.com/posts/21142

0 0