highlight.js

星期五, 12月 07, 2012

.NET SortedList 存放同樣 key 的物件

今天遇到使用 SortedList 時產生例外, 抱怨 key 相同, 這時我才注意到, 原來 SortedList 不能存放相同 key 的物件。不過其實嚴格來說, 並不是 key 相同就不能存放, 而是預設的比較器是很正規的比較, 當兩個比較對象相同時, 就會傳回 0, 而 SortedList 就會抱怨 key 相同, 產生例外。

根據上述, 解決方案其實很簡單, 就是自己實作一個只會傳回 1 與 -1 的比較器, 在建構 SortedList 時傳入, 這樣即使 key 相同也可以存入。比較器的實作非常簡單, 可參考這一篇討論串中一樓的解答


class MyComparer : IComparer
{

  public int Compare(int x, int y)
  {
    if (x < y)
      return -1;
    else return 1;
  }
}
非常簡單。

星期三, 12月 05, 2012

修改 Visual Studio 專案檔的儲存資料夾

我因為常常製作一些功能相近的小程式, 所以都會拿現有的專案複製之後修改, 不過這樣一來, 會遺留許多就專案的痕跡, 自己看了也很不舒服。其中, 有許多設定, 像是專案名稱、組件名稱、命名空間等等都可以在 Visual Studio 裡頭直接修改, 只有儲存的資料夾必須自己手動修改。

對於專案最外層的資料夾, 也就是儲存有 .sln 檔的資料夾, 可以隨意更改名稱, 但是裡層的資料夾 (預設與外層同名), 就必須在修改名稱之後, 再以文字編輯器開啟 .sln 檔, 將其中的資料夾對應到新的名稱才行。例如我有一個叫做 WinTCPTest 的專案:


若想更改紅色框的資料夾名稱, 就要使用文字編輯器修改 WinTcpTest.sln 檔:

只要將 Project 段落中的資料夾名稱改為新的資料夾即可。

星期六, 12月 01, 2012

Xcode 4.5 中 UIDatePicker 在重新開啟專案後寬度莫名其妙變成 480

自從 Xcode 4.5 預設啟用 autolayout 功能後, 許多地方若是沒注意, 就會出現靈異現象。今天我自己遇到的狀況就是在準備送印一本日文翻譯書之前, 整理要附贈的範例光碟, 發現有個介紹 UIDatePicker 的範例開啟後, UIDatePicker 的寬度就莫名其妙變成 480, 超出了 iPhone 預設的 320。

於是我做了個簡單的實驗, 建立一個 Single Page 樣板的專案, 在 Storyboard 中放置一個 UIDatePicker, 如下:
這時即使甚麼事情都不做, 立刻關閉專案, 之後再重新開啟專案, 就會看到 storyboard 的內容變成這樣:
你可以看到 UIDatePicker 突然變寬了, 如果從尺寸檢視面板查看, 會發現寬度變成了 480。不過如果你執行這個程式, 看起來又很正常:
如果一開始建好專案時, 就先把 autolayout 功能取消, 就不會有這樣的問題。目前我也還不知道到底是哪裡出錯?即使啟用 autolayout, 我看了 UIDatePicker 的 constrain 也都沒有甚麼問題, 使用 Xcode 4.5.1、4.5.2 (以及朋友在 4.6) 上都會有一樣的情況, 若您知道問題的癥結, 也請告訴我, 謝謝。

PS:之前我也遇到過 UIView 動畫在 autolayout 啟用時, 使用 center 屬性變更畫面上元件的位置會跑到錯的位置上, 顯然 autolayout 真是值得大家好好研究一番啊!