前兩種情況,使用者尚未輸入文字或還沒按下 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
沒有留言:
張貼留言