你為什麼不該在你的 iOS 軟體專案中使用 Storyboard

Storyboard 是蘋果從 iOS 5 起在 Xcode 開發工具中增加的新功能。

一直以來,無論是 Mac OS X 或是 iOS,都可以將應用程式所需要的介面呈現放在 nib 或是 xib 檔案中。我們可以用介面設計工具 Interface Builder(Xcode 4 整合到 Xcode 中),使用視覺化方式編輯 nib 或 xib 檔案,在程式執行時讓 runtime 將檔案中的 UI 定義轉換成對應的 Objective-C 物件。

因為之前有人問我為什麼有些 UIView subclass 在建立時會呼叫 initWithCoder:,而不是 initWithFrame:,其實並不難懂,這邊簡單解釋一下:nib 檔案是將 Objective-C 物件 serialize 成 binary data 的格式,所以用 nib 建立 UI,其實可以想成就是把 serialize 過的 data 再轉回物件;Objective-C 中負責處理物件/serialized data 相互轉換的物件叫做 NSCoder,所以你定義在 nib 裡頭的 view 在被建立時,呼叫到的就是 initWithCoder: 了,這套物件與資料轉換的機制,同時也是 Mac OS X 與 iOS 上實作 copy/paste 的基礎。而 xib 檔則是用 XML 格式表示 nib 檔的內容,在現在的開發流程中,平時我們會編輯 xib 檔案,但 xib 檔案會在 compile time 時被編譯成 nib 檔。

Storyboard 是這種視覺化開發方式的進一步發展。

在 iOS 5 之前,如果應用程式中有許多畫面,負責每個畫面的是各自的 view controller,在每個 view controller 中除了可以用程式碼撰寫建立 UI 物件外(實作 loadView: 這個 method),另一種方式則是讓每個 view controller 有各自對應的 nib 或 xib 檔案;Storyboard 則是將應用程式中原本有多個 nib 或 xib 檔案,合併成一個巨大的 XML,不但可以一次看到所有的畫面設計,也可以看到每個畫面之間透過線條串連起來的關係。或許可以這麼說:Storyboard 除了是一套畫面的設計工具外,也是一套說明在時間中畫面如何變化的敘述工具。

不過,在你的軟體開發專案中,建議不要使用 Storyboard。

Continue reading →

麥克魯漢

若干年之後回來看麥克魯漢的書,可以非常確定小時候一點都沒有讀懂,而能不能夠有所體會一些,則是要先打破一些成見。

我在這邊先替換一些用語—麥克魯漢認為所謂的媒體或是媒介,是人的延伸,人的各種感官的延伸,但麥氏所稱的人的延伸,其實比較接近中文裡「器物」或「工具」的意思;於是,我讀到的意思是,貫穿在《認識媒體》或《媒體即訊息》這些書的核心觀念是—人並不是工具的主宰,相反地,被工具所主宰。

人為了各種需求而創造各種工具,人以為可以透過工具理解進而控制世界,但人事實上卻被自己所創造的工具所控制—不同的工具延伸不同的感官,當某種感官的延伸特別突出,就會造就不同心理、不同性格、不同世界觀的人,而不同性格的人就會組成不同的社會。我們以為工具是中立的,只端看人怎麼使用,但工具的存在本身,就會影響人。

「媒體即訊息」(Media is message)或什麼「媒體即按摩(Media is massage)」,就在於一種媒體、或一種工具,就是一種感官刺激,而刺激了那種感官所帶來的效果,麥氏認為會比媒體上承載什麼內容,影響更大—不管你在報紙上面看到的是好新聞還是壞新聞,在這個當下,你的心理就已經是用「報紙」的角度來看所謂的好壞—至於媒體/工具/器物刺激感官的方式,就是所謂「冷媒體」與「熱媒體」之說。

(岔題。話說之前想到一個低級笑話:為什麼 Media is massage 呢?因為—裡頭都有 Happy Ending…。)

Continue reading →

總鋪師

我覺得《總鋪師》是一部設定錯亂的電影。

這麼說吧,這部電影的主軸是女主角小婉因為債務所逼,所以不得不回到家鄉繼承家業,成為總鋪師,從各種片段的資料中想辦法還原亡父蒼蠅師的辦桌技術,企圖藉由參加辦桌大賽贏得獎金扭轉劣勢,這個設定讓人聯想到浦澤直樹早年一部漫畫作品《Happy!》裡頭的海野幸。但,手上只有一份過去辦桌的用過的菜單,過去唯一的手稿又遺失了—蒼蠅師過去到底做過怎樣的菜?

在片中蒼蠅師被設定成南部第一、甚至全台灣第一的總鋪師,這個條件不成立,等於整個故事不成立—不然小婉哪有奪回父親榮耀、成為全台第一總鋪師的動力呢?但隨著故事的發展,你又實在看不出來蒼蠅師到底厲害在哪裡。

Continue reading →

要求

[soundcloud url=”http://api.soundcloud.com/tracks/103714843″ params=”” width=” 100%” height=”166″ iframe=”true” /]

我以為我的要求對誰來說都不算多
我只要你看著我回答問題不要閃躲
我根本並不要求你做什麼別的承諾
我只要你回答我別再消磨多一分鐘

好辛苦啊好辛苦、我只覺得好辛苦
好辛苦啊好辛苦、要個真相好辛苦
好辛苦啊好辛苦、為什麼這麼辛苦
好辛苦啊好辛苦、我只覺得好辛苦