你的第一个iOS应用(六) 排除错误和检查代码

排除错误和检查代码

如果你在编译或运行程序的时候遇到了一些问题,以至于程序不能正常运行, 那么就试一下这一章描述的方法来解决你的问题吧. 如果你的应用还不能正常运作,那么就和这一章最后所列出的代码比较一下吧.

代码与编译器警告

你的代码应该在编译的时候没有任何警告. 如果你获取到了一些警告,那么非常希望你将它视为错误. 因为Objective-C是一个非常灵活的语言,多数情况下编译器都会给你提示警告.

检查故事板文件

作为一名开发者,你肯定基于你的本能来检查你代码中的BUG. 但是当你是哦那个Cocoa Touch的时候,是添加在其他地方的. 你的应用的许多设置也许都会 "编码" 到了故事板中. 例如, 如果你没有正确的进行连接,那么你的应用将没有你所期待的表现.

  • 如果当你点击按钮的时候,文本没有更新, 那么你可能没有将按钮的动作(action)连接到视图控制器中, 或者你没有连接文本框与标签的出口变量(outlet).

  • 如果当你点击键盘上的Done的时候并没有消失掉,那么你可能没有连接文本框的代理或者连接视图控制器的textField出口变量(outlet)到文本框. 无比要在故事板上检查一下文本框的连接: 在文本框上按住Control键并左键点击就会显示出一个半透明的连接面板. 你应该可以在Outlets的delegateReferencing Outlets中textField左面看到一个已填充的圆形.

  • 如果你已经连接了代理,那么可能有一些更细节的问题 (see the next section请看下一部分, “代理方法的名字”).

代理方法的名字

一个常见的错误就是你把代码方法的名字拼错了. 如果没有在实现中使用正确的代理函数的名字的话,那么即使你已经正确设置了代理对象,它也是不会正确调用函数的. 这个通常最好的方法就是复制并粘贴代理函数的声明,例如文档中的textFieldShouldReturn函数,以防止函数名写错.

代码列表

这部分提供了HelloWorldViewController类文件的接口和实现文件(.h和.m). 注意这个下面所列出的文件不会显示任何注释以及Xcode所生成的其他函数的实现.

The Interface file: HelloWorldViewController.h

#import <UIKit/UIKit.h>
 
@interface HelloWorldViewController : UIViewController <UITextFieldDelegate>
 
@property (copy, nonatomic) NSString *userName;
 
@end

The Implementation File: 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.
}
 
- (void)viewDidUnload
{
    [self setTextField:nil];
    [self setLabel:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}
 
- (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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值