
前兩種情況,使用者尚未輸入文字或還沒按下 New 、 Load 按鈕建立 Encrypt 物件 (object) ,都有可能導致程式發生不明原因的錯誤,這一方面,我們需要自行設計防止錯誤發生的機制。
使用者沒有輸入文字的話,屬性 (property) inputText 就會是 nil , nil 表示非物件的意思。如果發生這種情況,就不應該繼續編碼或解碼
if (inputText == nil || ![inputText compare: @""]) {
[displayField setStringValue: @"This is Encode button. No input string!!"];
}連續兩個 || 為邏輯上的或運算子 (operator) ,上面我們把空的 NSString 字串 (string) 也納入條件之一, compare: 為比較原 NSString 字串是否與參數相同,相同就回傳整數 0 ,所以前面另外加上 ! 邏輯的補數運算子,因此 ![inputText compare: @""] 表示 inputText 與 @"" 相同就回傳整數 1 ,也就是 Yes 。
同樣,使用者沒有按下 New 、 Load 按鈕建立 Encrypt 物件,屬性 encrypt 也會是 nil
if (encrypt == nil) {
[displayField setStringValue: @"This is Encode button. No Encrypt object!!"];
}若是,使用者已經輸入文字,又有按下 New 、 Load 按鈕建立 Encrypt 物件,那就可以編碼或解碼囉!下面是編碼的部份
outputText = [outputText stringByAppendingString: [encrypt toEncode: inputText]]; [outputField setStringValue: outputText]; [displayField setStringValue: @"This is Encode button. The result is above."];
解碼的部份如下
outputText = [outputText stringByAppendingString: [encrypt toDecode: inputText]]; [outputField setStringValue: outputText]; [displayField setStringValue: @"This is Decode button. The result is above."];
我們把編碼的相關程式碼以上組合放進 encode: 方法 (method) 中
- (IBAction) encode: (id)sender {
outputText = @"";
if (inputText == nil || ![inputText compare: @""]) {
[displayField setStringValue: @"This is Encode button. No input string!!"];
}
else {
if (encrypt == nil) {
[displayField setStringValue: @"This is Encode button. No Encrypt object!!"];
}
else {
outputText = [outputText stringByAppendingString: [encrypt toEncode: inputText]];
[outputField setStringValue: outputText];
[displayField setStringValue: @"This is Encode button. The result is above."];
}
}
}我們用巢狀的 if-else 組合這些條件,首先,若 inputText 是空字串,全部的工作就 displayField 印出提示訊息,接著結束。若 inputText 不是空字串,就繼續測試是否存在 encrypt ,如果沒有就印出提示訊息,然後結束,如果有的話,才會進行編碼的工作,並將編碼結果放在 outputField 內。
另外 decode: 如下
- (IBAction) decode: (id)sender {
outputText = @"";
if (inputText == nil || ![inputText compare: @""]) {
[displayField setStringValue: @"This is Decode button. No input string!!"];
}
else {
if (encrypt == nil) {
[displayField setStringValue: @"This is Decode button. No Encrypt object!!"];
}
else {
outputText = [outputText stringByAppendingString: [encrypt toDecode: inputText]];
[outputField setStringValue: outputText];
[displayField setStringValue: @"This is Decode button. The result is above."];
}
}
}Build and Go ,來編碼看看囉

接下來,我們繼續設置清除與拷貝的功能吧!
| 中英文術語對照 | |
|---|---|
| 編碼 | encode |
| 解碼 | decode |
| 物件 | object |
| 屬性 | property |
| 運算子 | operator |
| 字串 | string |
您可以繼續參考
GUI 篇
相關目錄
Objective-C 入門指南
Objective-C 教材
首頁
參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide
沒有留言:
張貼留言