2016年5月31日 星期二

NSDictionary排序實作

原先按照以往的開發習慣(C#)將一些設定寫入NSDictionary,取值時才注意到原來NSDictionary是沒有排序的...

stackoverflow真是開發人員的好朋友,

參考到這篇Sorting NSArray of dictionaries by value of a key in the dictionaries

才發現又犯了老毛病用C#再看待iOS專案...

在iOS Developer Library中,有一個專門講述排序的主題<<Sort Descriptor Programming Topics>>

還想進一步鑽研的話,還有一篇Key-Value Coding Programming Guide

----
NSDictionary排序實作如下:

2016年5月30日 星期一

storyboard中的控制項無法連結至.h標頭檔

說來奇妙,這是很簡單的動作,但是每當久久一次...再度維護ios專案時...總是會卡在這個問題上,除了接觸時間不多QQ...也可以說是深植在潛意識的結果,

幾年前興沖沖的參加某個iphone/ipad app開發專班時,當時講師就在課堂上為了這個問題卡了許久...其實我並不怪講師學藝不精...真要說起來這個講師應該是倒楣+準備不足+藝高人膽大,該課程期間正逢xcode改版新增了分鏡表(Storyboard),但是開課單位提供的卻是改版前沒有storyboard的教材,一會兒控制項設定視窗跳不出來、一會兒範例上使用的方法不適用storyboard或是方法已停用...,
聽得台下一頭霧水,當時一同上課的同事就很性格的在整個課程期間專心研讀自己準備的參考書....
雖說xcode許多設計是很直覺,但在長期使用Visual Studio的習慣制約下,這種直覺,剛開始接觸時我很難理解,後來參考同事的作法,買了 一本圖文並茂的參考書,在課後找時間實作才稍微進入狀況,可能是當時的印象太深刻了吧,每當開啟storyboard時,就會開始想會不會設定視窗跳不出來....

整理這篇,是為了打開這個深埋在潛意識中會造成卡關的結,應該很少人會在這種細節上卡關吧...

一、如何連結控制項至.h標頭檔?
   Step1、在控制項上按著滑鼠右鍵拖拉到.h標頭檔。
                (或是按滑鼠左鍵+control鍵)
   Step2、正常情況下,在Step1後會出現"Insert outlet or outlet collection"的提示文字,放開滑鼠鍵、control鍵後會跳出設定用的交談視窗,輸入相關設定後連結完成。


2016年5月25日 星期三

App Transport Security

開發環境更新至iOS 9之後,原先正常運作的App資料跑不出來了,這個有一搭沒一搭始終無法投注太多心力的App...,一發生狀況,最為難的情況就是不常維護整個環境生疏了, 光是找到這個錯誤訊息就花費不少時間...

 kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." 

一查詢原來iOS 9針對資料傳輸新增了控管機制 App Transport Security (ATS):

 App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one. If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file. 
 資料來源:What's New in iOS (9.0)


怎麼解決呢?

2016年5月18日 星期三

當 IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'TableName' 的識別欄位中

使用識別欄位(通常是自動編號)的資料表複製移動時,
出現當IDENTITY_INSERT 設為 OFF 時,無法將外顯值插入資料表 'TableName' 的識別欄位中

參照MSDN: SET IDENTITY_INSERT (Transact-SQL)

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

於Insert Into 前先執行
SET IDENTITY_INSERT TableName On;


結果出現另一個錯誤訊息:位於資料表 TableName 的識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。


2016年5月10日 星期二

找不到型別或命名空間名稱

今天遇到了如同怪異的「找不到型別或命名空間名稱」錯誤這篇所提到的情況,整個就是很怪異,原先正常運作的專案,突然冒出這個錯誤,檢查了老半天,也確定<Type/Namespace>有正常載入,在耗費大半天之後,終於發現...原來我安裝的CrystalReportFor Vs更改了web.config檔--註解了部份原始設定,另外再加上新設定(也有可能是自己手殘誤觸註解鈕),把web.config檔中,位於assemblies數個重要的assembly給註解掉了.......囧,
如果遇到了這個錯誤,又查不到原因,不妨檢查一下設定檔....


2016年5月3日 星期二

ASP.NET Web Form-偵測用戶端瀏覽器類型與支援的功能

其實,進入HTML5的時代有那麼多響應式網頁設計的模組可以使用,只要設計得當,前端界面應該不太需要做特殊判斷,至於後端...總會有些奇奇怪怪的情況來考驗,雖然困擾了幾天,最後這些資料沒派上用場XDDD

不過資料都收集了,就稍加整理做為這次被考驗的紀念...

-----------------------------------這是分隔線-----------------------------------

偵測用戶端瀏覽器屬性在前端可以用javascript達成,例如:

alert(navigator.userAgent);

有時必須在後端做判斷,(ASP.NET WebForm)可以取 Requset.UserAgent的值,
更細節的支援功能則可使用HttpRequest.Browser

How to: Detect Browser Types and Browser Capabilities in ASP.NET Web Forms

必須注意的是HttpBrowserCapabilities 提供的是用戶端瀏覽器所支援的功能,而不是用戶端瀏覽器的設定值。

想要將用戶端瀏覽器支援的功能呈現在網頁上,MSDN提供的範例是:

2016年5月1日 星期日

Microsoft SQL Server, 錯誤: 18456

通常是在執行SQL Server連線時才有機會看到18456這個錯誤訊息,這跟SQL Server授權驗證有關,也就是說看到這個訊息代表的是連線失敗。

SQL Server 的登入驗證方式有2種:[Windows驗證]以及[SQL Server驗證]。

1.Windows驗證:使用Windows本機端使用者帳戶登入SQL Server。
選擇這個驗證方式,並且看到錯誤:18456時,有可能是安裝SQL Server的過程中未將該帳戶加入存取權限,或是新建的使用者帳戶。因此,在能連線到SQL Server的狀況下,到SQL Server\安全性\登入中,加上該本機端使用者帳戶即可。
詳細設定可參考這篇:
以 Windows 驗證方式登入 SQL Server 時,遇到錯誤代碼為 18456 的錯誤,該如何排除?

2.SQL Server驗證:使用SQL Server帳號登入。
選擇這個驗證方式,在排除帳號、密碼輸入錯誤的情況下看到錯誤: 18456,絕對不是人品不佳,而是沒有開放SQL Server驗證模式。
怎麼開放呢?  開啟[伺服器屬性]->選取頁面[安全性],將驗證模式異動為"SQL Server 及 Windows 驗證模式"。
設定完成後,須重新啟動SQL Server服務(不是把Management Studio關掉重開喔)。