2014年9月30日 星期二

NSURLConnection programmatically using Swift language

【說明】

此份筆記將紀錄如何下載網路上的東西,並以NSData儲存。


【部分程式碼】

建立連線,指定代理人:

let topPaidAppsFeed: NSString = "http://phobos.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/limit=75/xml"
var appListFeedConnection: NSURLConnection!

var url: NSURL = NSURL(string: topPaidAppsFeed)
var request: NSURLRequest = NSURLRequest(URL: url)

appListFeedConnection = NSURLConnection(request: request, delegate: self)
建立URL的連線,必須有NSURL以及NSURLRequest,並設定自己為NSURLConnection的代理人。

採納Protocol:

NSURLConnectionDataDelegate, NSURLConnectionDelegate
Class必須採納NSURLConnectionDataDelegate與NSURLConnectionDelegate。

實作Method:

func connection(connection: NSURLConnection, didFailWithError error: NSError) {

}
當連線有問題時會觸發的func。

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
        
}
當接收到回應時會觸發的func,此時我們就可以建立一個NSMutableData的實體。

func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        
}
資料會被分成好幾個區塊傳送,此時就會透過didReceiveData來接收每一個區塊,所以我們就可以利用NSMutableData裡的appendData將區塊的資料合併成一個完整的資料。

func connectionDidFinishLoading(connection: NSURLConnection) {


}
當資料傳送完成時會觸發的func,此時就可以得到下載完成的NSMutableData,使用NSXMLParser就可以解析Data,讓我們應用。

2014年9月13日 星期六

MKAnnotationView programmatically using Swift language

【說明】

此份筆記將紀錄如何將原本在地圖上面的針換成自訂的圖片。


【片段程式碼】

該Class需成為MKMapView的代理人,並實作viewForAnnotation這個method,如下所示。

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView {
        
    var annotationView: MKAnnotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "anno")
    annotationView.image = UIImage(named: "pin.png")
    annotationView.canShowCallout = true
        
    return annotationView

}
canShowCallout是決定Annotation點選時是否跳出View。


【執行結果】

2014年9月8日 星期一

Self Sizing Cells programmatically using Swift language

【說明】

此份筆記出處來自於這篇

此份筆記將紀錄當資料超出UILabel時要如何自動換行顯示,確保所有資料都能正確的顯示出來。

原始資料,如下圖所示。

原始資料


【片段程式碼】

首先先替UILabel加入Auto-Layout,如下圖所示。

nameLabel加入Auto-Layout

addressLabel加入Auto-Layout

設定Label的Line為0,如下圖所示。(此處僅示範nameLabel)

設定Label的Line數

在viewDidLoad內加入兩行程式碼,如下所示。

tableView.estimatedRowHeight = 68.0
tableView.rowHeight = UITableViewAutomaticDimension
告訴TableView預計的Row高度為68。將TableView row的高度設定為UITableViewAutomaticDimension。


【執行結果】




【專案範例】

2014年9月1日 星期一

NSUserDefaults programmatically using Swift and Object-C language

【說明】

此份筆記將紀錄如何使用NSUserDefaults來紀錄一些使用者的預設值。

可以儲存Bool、Float、Integer、Object、Double、Double,適合儲存程式一執行的使用者預設值。

NSUserDefaults是用plist在做儲存。


【片段程式碼】

儲存值的方式:

<Swift>

NSUserDefaults.standardUserDefaults().setValue("Hello", forKey: "stringKey")

<Object-C>

[[NSUserDefaults standardUserDefaults] setObject:@"Hello" forKey:@"stringKey"];
若只有執行這行程式碼並不會真正的將值儲存,因為Hello這個字串目前只是儲存在暫存記憶體內而已,還沒有寫到可以永久保存的區塊,必須執行synchronize才會將值真正的儲存起來,如下所示。

<Swift>

NSUserDefaults.standardUserDefaults().synchronize()

<Object-C>

[[NSUserDefaults standardUserDefaults] synchronize];

取得值的方式:

<Swift>

NSUserDefaults.standardUserDefaults().stringForKey("stringKey")

<Object-C>

[[NSUserDefaults standardUserDefaults] stringForKey:@"stringKey"];

刪除值的方式:

<Swift>

NSUserDefaults.standardUserDefaults().removeObjectForKey("stringKey")

<Object-C>

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"stringKey"];