iOS 6 Objective-C 速成 已翻译 100%

messense 投递于 2013/04/06 14:29 (共 26 段, 翻译完成于 04-08)
阅读 7949
收藏 20
5
加载中

你是一位熟悉另一平台,希望开始 IPhone 开发(从而接触 Objective-C)的软甲开发者?不久之前的我就处于如此境地,而且坦率的说,由于日常工作的需求,我远离开发很久了。

在两年之后,我已经创造了很多 iPhone 和 iPad 的应用。正如我的学习过程千辛万苦,我希望你能够从我所经受的磨难中获得一些益处。

本教程针对有开发经验的读者。假定你分得出 while loop 同 fruit loops 的区别,以及 debug 同 ladybug 的区别!如果你对编程完全陌生,你可以先看看 给高中学生的 iOS 书 系列。

K6F
K6F
翻译于 2013/04/07 14:19
1

此教程的目标是通过 Objective-C 的基础内容,给予你一些信心。不同于“让我们分析一下语法的每个片段”的做法,你将得到实践和工作实例。这样,当需要更进一步时,你能够更容易的查阅参考(类似 这种)。

在此教程中,你将创建一个从储存的列表中随机抽取格言的简单应用。在此过程中,你将能够熟悉 Objective-C 的某些部分,包括:

  • 变量
  • 数组
  • 属性列表
  • 字符串
  • 断言
  • 随机选择
  • 简单的界面对象和事件

我需要先警告你——使用 Objective-C 进行 iPhone 开发的过程很有趣,你可能会有些上瘾。做好放弃一些睡眠,家务堆积的心理准备!:]

在开始前,先确认你拥有一个苹果开发者账号,并配置完毕,同时安装了最新版的 Xcode (你可以在 Mac App Store)免费下载。

如果都准备好了,I will (Objective) C-you after the jump! :]

K6F
K6F
翻译于 2013/04/07 14:33
2

准备开始

凡事有先后:创建一个 Xcode 项目。这篇教程以 Xcode 4.5+ 和 iOS 6+ 环境为基础——如果你的 Xcode 版本较老,要不然升级,要不然改看本教程 iOS 6 之前的版本

启动 Xcode 并通过 iOS\Application\Single View Application (单视图应用)模板创建一个新项目。

键入 QuoteGen 作为项目名称,将设备家族设为 iPhone,确认 Use Automatic Reference CountingUse Storyboards 被点选(且其它复选框未点选)。然后就可以点击下一步并选择项目保存路径了。

使用 Single-View Application 模板创建新项目

你可以看到,你的项目中自动创建的文件有: AppDelegate.hAppDelegate.mViewController.h 以及 ViewController.m 。同时还有 MainStoryboard.storyboard

View-based application 模板的默认文件

AppDelegate 包含初始化应用的代码。在此教程中,你只需要知道这些。下面是你需要应对的文件的简要说明:

  • MainStoryboard.storyboard 是一个界面布局文件,通过此文件你可以可视化的创建/设计程序在 iPhone 屏幕上的显示界面。
  • ViewController.m 是界面控制器类。界面布局文件被链接到此类。这个过程是自动完成的,因此现阶段你你只需要了解你在界面类中设置的对象和事件将会很容易的同你的界面布局链接。同时,这个文件也是承载你即将编写的 Objective-C 代码.
  • ViewController.h是界面控制器类的头文件,实体变量以及屏幕界面需要访问的对象和事件都将被定义在这里。

注意:在 Xcode 中创建界面有两种方法——使用 Storyboards 或 Xcode Interface Builder files (XIBs)。每个方式都很好用,在这篇教程里我们将使用 Storyboards,这是现在最流行的方式。不过两种方法非常相似——只要了解了一种,即可触类旁通。

关于 Storyboards 的更多信息,请在之后参阅 此教程

K6F
K6F
翻译于 2013/04/07 14:59
1

向前进

首先你要做的事情就是为在此应用中显示的摘引建立几个变量——普通摘引和视频相关摘引。
为此,你需要创建两个 Objective-C 属性。关于属性有一些微妙之处,但现在你只需要将其视为为你的类创建变量的方式。
创建属性很容易——让我们通过为摘引数组创建属性示例。在 ViewController.h 文件中 @interface 和 @end 行之间加入下面一行:

@property (nonatomic, strong) NSArray *myQuotes;

让我们一点点分解它:

  • 首先你需要添加 @property 关键词。
  • 然后,你将列出 属性的特性。在此不再深入—— nonatomic 特性将提高线程安全消耗的性能,而 strong 特性则表示只要持有某个指针的对象存在,则此指向具体变量指针将一直保存在内存之中。
  • 之后,你将列出 属性的类型。这里选择 NSArray *,意为“指向 NSArray 类的指针”NSArray 是苹果公司提供的一个方便保存列表信息的类——我们很快就会谈到它。
  • 最后,添加属性名

通过添加这一行,你有了一个这个类可以读取和设置的变量!

注意:在过去,在创建属性之后你还需要 @synthesize 处理,而在更早的过去,你还需要手动声明你的实体变量。这一切现在都不必再做了——现在你只需要一行代码,即可添加一个属性。
同样在过去,你需要自己处理所有的内存管理,但通过新的名为 Automatic Reference Counting (ARC) 的特性,这个过程变得自动化了。阅读更多 ARC 相关,参阅 此教程.
我是不是因为知道这一切泄露了我的年纪了? :]

这个应用也将保存一些电影中的名言。因此你需要创建第二个数组:

@property (nonatomic, strong) NSMutableArray *movieQuotes;

这里使用 NSMutableArray 只是为了说明数组的不同类型。却别在于,在创建 NSArray 之后,你不能增加或减少其项目,而 NSMutabelArray 则随时可以。


K6F
K6F
翻译于 2013/04/07 15:30
1

体力活


现在,你可以将你最喜欢的名言保存在 myQuotes 数组中了。你将在 viewDidLoad 中完成这一步,此方法在视图(屏幕)第一次被创建时被调用
viewDidLoad 的 [super viewDidLoad]; 一行后添加下面的代码。你可以添加你喜欢的名言。这是一项“体力活”,我们可以只加几个数组项。

// 1 - Add array of personal quotes
 self.myQuotes = @[
                     @"Live and let live",
                     @"Don't cry over spilt milk",
                     @"Always look on the bright side of life",
                     @"Nobody's perfect",
                     @"Can't see the woods for the trees",
                     @"Better to have loved and lost then not loved at all",
                     @"The early bird catches the worm",
                     @"As slow as a wet week"
                     ];

这样,我们就将 myQuates 属相填充完毕了。这里有一些你可能没有用过的时髦语法,让我们破解它。


  • self 是一个特殊关键词,意为“当前类”——类似其它语言中的 this
  • 你可以通过点+属性名的方式访问类属性——例如:使用 self.myQuotes 访问你之前创建的myQuates 属性。
  • 要想创建数组,Objective-C 中有一个方便的新简写——@[ item1, item 2, item 3 ]
  • 数组中的每一项都是一个字符串。要在 Objective-C 中创建字符串,你需要为其添加 @ 符号作为前缀。如果你习惯于其它语言,这点很容易被忘记,并导致你的应用崩溃 :] 所以当你的使用字符串的应用崩溃时,重新检查一下你是否忘记使用 @ 符号了!

很好——现在你的名言数组已经准备就绪。是时候添加随机显示名言的代码了。

K6F
K6F
翻译于 2013/04/07 15:46
1
开始Outlets

你还没创建用户界面,但要做的话,你需要添加一个文本框来显示名言,一个按钮点击获取随机名言。

为了显示一个随机名言在屏幕上,你需要两件事情-一个文本框的引用来设置文本,和按钮被点击的通知。

但是你如何把界面上的事情和代码关联起来?通过两个关键字 – IBOutlet 和 IBAction!

让我们看看它们怎么工作,先看看IBOutlet。在ViewController.h 数组下面添加下面的代码:

@property (nonatomic, strong) IBOutlet UITextView *quoteText;

这里你像之前一样声明了一个属性(UITextView类型的),但你用一个特殊的关键字标记它 – IBOutlet.

IBOutlet 意味着 quote_text 是一个可以链接到XIB文件的一个界面元素的对象。这样view controller 就可以通过这个属性访问(修改)那个界面元素了。 这样, 我们将设置这个UITextView显示的文本,但你也可以轻松的修改它的颜色,字体,大小,等等。

下来,在属性列表的后面添加下面的代码:

- (IBAction)quoteButtonTapped:(id)sender;
ljb_iss
翻译于 2013/04/07 17:29
2
它定义了一个方法,你必须在这个类里实现它。这是第一次你看到在Objective-C看到定义方法,所以我们一点点的讲解一下:
  1. 首先你输入一个破折号 -, 表明你要声明一个实例方法。
  2. 下来你输入这个方法的返回类型。这个方法返回一个 IBAction, 实际上IBAction定义为void - 也就是说这个方法什么也不返回。但 IBAction 有特别的用途 – 它标记这个方法可以链接到一个界面元素的动作上。在这个例子,你把按钮点击动作,关联到这个方法上,也就是当按钮点击后,这个方法被调用。
  3. 下来你输入方法的名字 – quoteButtonTapped.
  4. 下面输入冒号,然后在圆括号中输入第一个参数的类型。id 是一个特殊类型,代表“任何从NSObject继承的对象”。通常当你设置按钮或者其他控件的回调时,它们用这个按钮/控件作为第一个参数调用回调。因为你不需要知道它是什么类型,所以你在这里输入id。
  5. 下来你输入参数的名字 – sender

如果你有超过一个的参数,你应该重复步骤3-5。在Objective-C命名方法的语法有点奇怪,但你习惯了就会喜欢上它。

下来,切换到 ViewController.m 文件去添加quoteButtonTapped:的实现。在文件的结尾处(但要在@end之上)添加下面的代码 :

-(IBAction)quoteButtonTapped:(id)sender {
    // 1 - Get number of rows in array
    int array_tot = [self.myQuotes count];
    // 2 - Get random index
    int index = (arc4random() % array_tot);
    // 3 - Get the quote string for the index
    NSString *my_quote = self.myQuotes[index];
    // 4 - Display the quote in the text view
    self.quoteText.text = [NSString stringWithFormat:@"Quote:\n\n%@",  my_quote];
}


ljb_iss
翻译于 2013/04/07 17:43
1
让我们一行一行的讲解一下:
  1. 首先你得到一个数组的数据项个数。这是你第一次看到在Objective-C调用函数的例子。这个语法有点奇怪 – 你输入左方括号([), 然后输入包含你要调用的方法的对象的名字(self.myQuotes), 然后输入你要调用的方法名(count). 最后,你输入右方括号结束方法调用 (]). 注意这个方法不包含任何参数 – 你会在第四步看到包含参数的例子。
  2. 下来你使用 arc4random 函数来产生一个随机数。arc4random() 是一个常规的 C 风格的函数 (而不是方法), 所以你使用你熟悉和热爱的括号语法。在这个例子,因为你想随机选择一个名言,这个最大可能性就是数组的行数,最小可能性就是0.在Objective-C (就像其他很多的语言), 输入的第一行是从0开始而不是1.
  3. 下来你要在myQuotes查找一个数据项。 Objective-C’新的字面语法(literal syntax)允许你在访问一个NSArray数据项时使用你这里看到的下标语法。
  4. 最后,你使用 stringWithFormat 方法格式化最终的输出字符串,这样你就可以在显示名言前显示一个标签和换行。它就象C/C++的printf一样使用变量替换。%f 是浮点型, %d 是整形, %@ 是Objective-C 对象.

现在为了真正的在屏幕上显示名言,你需要把这个类的文本框的outlet链接到你的XIB文件的一个文本框界面元素。

ljb_iss
翻译于 2013/04/07 17:57
1

关联控件

让我们看看怎么做, 打开 MainStoryboard.storyboard. 下来,查看Xcode窗口的右边侧边栏。如果你看不到,你需要点击上面工具栏中“Views”这一区中的最右边的按钮,来显示右边的侧边栏。

右边的侧边栏的下半部分有四个tabs,你可以点击相应的图标来切换tab,我们现在要切换到 Object Library.

从 Object Library 拖拽一个文本框(Text View)和一个圆角矩形按钮(Round Rect Button)到我们的view上。按照自己的喜好把它们放好位置。在按钮上加一个标题,例如“名言”。如果喜欢还可以改变一下控件的颜色和字体。你可以通过右边侧边栏的上半部分改变控件大部分属性,它也有好几个可以切换的tab - 我们最常用的是用来定制控件外观的 Attributes Inspector tab.

Storyboard layout for Objective-C tutorial

ljb_iss
翻译于 2013/04/08 09:19
1

因为这个文本框只是用来显示,所以要取消 Behavior 中的 Editable 复选框.

现在你需要链接这个按钮和文本框到你之前在类中设置好的outlet和action。

按着control键,鼠标左键点击左边侧边栏的View Controller,然后拖拽到中间的文本框,然后释放鼠标左键,会弹出一个弹出菜单,选择其中的“quoteText”.

Connecting the text view to the outlet

另外的一种方式是,你可以先选中左边栏的view controller,然后点击右边栏上面图标,切换tab到 Connections Inspector tab. 然后就可以看到你的View Controller的所有可用的链接,然后拖拽“quoteText”到中间文本框。

Connections Inspector

请记住,Storyboard之所以知道你的quoteText属性,是因为你之前添加的IBOutlet关键字!

ljb_iss
翻译于 2013/04/08 09:43
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(1)

穿越星辰
穿越星辰
good
返回顶部
顶部