雖然這篇NSString鄉民發文沒有被收入到精華區:在NSString這個話題中,我們另外找到其它相關的精選爆讚文章
在 nsstring產品中有3篇Facebook貼文,粉絲數超過2萬的網紅紀老師程式教學網,也在其Facebook貼文中提到, [iOS 6.0 新功能] Attributed String 這是我最近製作新版 iOS 6.0 程式設計講義時發現的。以前的字串(不管是 NSString 或 NSMutableString)都無法設定「被景色」、「前景色」、「加粗、斜體、底線」、「陰影」。更別說一個字串內,前面三個字與後面兩...
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
nsstring 在 紀老師程式教學網 Facebook 的最讚貼文
[iOS 6.0 新功能] Attributed String
這是我最近製作新版 iOS 6.0 程式設計講義時發現的。以前的字串(不管是 NSString 或 NSMutableString)都無法設定「被景色」、「前景色」、「加粗、斜體、底線」、「陰影」。更別說一個字串內,前面三個字與後面兩個字分別使用不同的「顏色、字體、陰影」了。
但這些在 iOS 6 內都變成可能!iOS 6 引入新的「Attributed String」,可以針對字串全體、或是局部,進行不同的字體與顏色變換。詳細方法可以參考隨附連結。如同各位所知,「字串」(NSString、NSMutableString)備用在很多 iOS 的視覺元件。如:UILabel、UITextField...到處都有字串的影子。也就是說,現在暗藏在這些視覺元件內的字串,也能套用「Attributed String」特性,讓視覺元件內的一個字串,呈現不同風貌。
有需要的朋友,請點選下列連結觀看:
http://ioscreator.com/format-text-in-ios6-attributed-strings/
nsstring 在 紀老師程式教學網 Facebook 的最佳貼文
[iOS Programming] 什麼是 Key-Value Coding?
剛剛收到班上同學的來信,說他在網路上看到一個名詞,叫 Key-Value Coding。問我什麼是 Key-Value Coding。由於這個主題比較冷僻,用到的機會也不能算多。在只有 48 小時得把所有 iOS SDK 教完的壓力下,這個主題被我捨棄了。沒想到同學們還是很用功啊!看來我不講是不行的了(所以說,出來混,一定要還的...)。
先做個定義吧:「Key-Value Coding 就是一種可以用『字串』,來存取物件內某個『屬性欄位』的技巧」。
假設你有一個類別叫做「People」,裡面有兩個屬性欄位「name」與「addr」定義如下:
@interface People : NSObject
{
NSString *name;
NSString *addr;
}
@property NSString *name;
@property NSString *addr;
@end
然後你用 People 宣告了一個名為 robert 的物件,並指定初值給它。如下所示:
People *robert = [[People alloc] init];
robert.name = @"Robert";
robert.addr = @"台北市忠孝東路 1 號";
若你要存取「name」與「addr」屬性,你得這麼寫:
NSLog(@"%@", robert.name); // 印出 robert 物件 name 屬性內容 --> "Robert"
NSLog(@"%@", robert.addr); // 印出 robert 物件 addr 屬性內容 --> "台北市忠孝東路..."
使用 Key-Value Coding,你可以這麼存取屬性值:
NSLog(@"%@", [robert valueForKey:@"name"]); // 存取到 robert 內的 name 欄位。
你有沒有注意到,欄位名稱「name」被字串化了!也就是說,只要你把 "name" 改為 "addr",抓到的欄位值就是 robert.addr 的了。
這有什麼好處呢?舉例來說,你製作了一個資料庫 App,有個下拉式清單,列出所有可以讓使用者選擇的欄位名稱。如「姓名」、「住址」...。使用者只要選擇了一個欄位,如:住址,就可以印出當前物件內,住址那一欄。如果你先把「姓名」與對應的欄位名稱「name」、以及「住址」與對應的欄位名稱「addr」…以「鍵值對(Key-Value Pair)」的方式存放好:
Key Value
------------
姓名 name
住址 addr
...
在 Objective-C 內,鍵值對是用 NSDictionary 類別存放的:
NSArray *keys = [[NSArray alloc] initWithObjects: @"姓名", @"住址", …nil];
NSArray *values = [[NSArray alloc] initWithObjects: @"name", @"addr", … nil];
NSDictionary *dic = [[NSDictionary alloc] initWithObjecs:values forKeys:keys];
則 Key 可以拿去當下拉式功能表要顯示的內容。當使用者選擇了其中一項,如:「姓名」,我就可以拿回到「鍵值對」的物件,查到它對應的值是「"name"」。接著,我就可以用所謂的「Key-Value Coding」這招,抓出當前物件姓名欄位的值:
NSLog(@"%@", [robert valueForKey: theValue]); // theValue 代表由「鍵值對」中查到的值「"name"」。
若使用者選擇的是「住址」,則 theValue 會被填入「"addr"」,上述程式碼不用改一個字,照常抓出 robert 物件內住址欄位的值。
您看出「Key-Value Coding」的價值了嗎?萬一 People 類別內有上百個欄位,我要印出特定欄位的值,都是用下列這一道就解決了:
NSLog(@"%@", [robert valueForKey:@"name"]);
不用 Key-Value Coding、把物件的屬性欄位「字串化」的話,想存取特定欄位,你一定得寫一堆 if ~ else:
if (選中的欄位 == 「姓名」)
fieldToBePrinted = robert.name;
else if (選中的欄位 == 「住址」)
fieldToBePrinted = robert.addr;
else
…
這樣,大家知道 Objective-C 內的 Key-Value Coding 是什麼意思了嗎?
nsstring 在 紀老師程式教學網 Facebook 的精選貼文
[iOS Programming] 如何把 iPhone 內的 SQLite 資料庫匯出?
今早正在如火如荼地陷入「講義製作地獄」時(笑),網友梅干兄用 MSN 敲了我一下。原來他新製作的 iOS App 上架了: http://www.minwt.com/myapp/5013.html (可喜可賀!可喜可賀!)
後來梅干兄問道:「如何把 SQLite 的資料庫匯出?」我稍微楞了一下,從我殘破不堪的大腦,嘗試匯出「如何把 SQLite 匯出」的條目...還好還有點印象。除了回覆梅干兄之外,也提供給朋友們參考:
(1) 自己寫程式將 SQLite 需要的資料撈出,存入一個檔案中(通常為 .CSV 格式),然後將設備接上 iTune,從 iTune 裡把該檔案抓出來。這是最笨的方法,但...也是我最常用的方法...(羞)。參考程式碼如下:
FMDatabase *db = [[FMDatabase alloc] initWithPath:@"/path/to/db/file"];
if (![db open]) {
//couldn't open the database
[db release];
return nil;
}
FMResultSet *results = [db executeQuery:@"SELECT * FROM tableName"];
CHCSVWriter *csvWriter = [[CHCSVWriter alloc] initWithCSVFile:@"/path/to/csv/file" atomic:NO];
while([results nextRow]) {
NSDictionary *resultRow = [results resultDict];
NSArray *orderedKeys = [[resultRow allKeys] sortedArrayUsingSelector:@selector(compare:)];
//iterate over the dictionary
for (NSString *columnName in orderedKeys) {
id value = [resultRow objectForKey:columnName];
[csvWriter writeField:value];
}
[csvWriter writeLine];
}
[csvWriter closeFile];
[csvWriter release];
[db close];
[db release];
(2) 用 SyncDocs 這套軟體。
SQLite 資料庫基本上也是一個檔案。所以也可以把整個 SQLite 的檔案,從 iPhone 裡撈出來。網友推薦一套 SyncDocs 可以做到這件事。請參考下面連結:
> SyncDocs 使用方法討論: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4630-best-way-export-data-sqlite3-database.html
> SyncDocs 首頁: http://syncdocs.sourceforge.net/
(3) 用 iExplorer 這套軟體。
這套軟體可以安裝在你的筆電,接上 iPhone 後,去探索整個 iOS 系統,就像檔案總管可以探索整部 Windows 系統是一樣的。當然 SQLite 資料庫也可以透過這套軟體「看見」,您就可以將之「匯入」。該軟體的首頁為:
http://www.macroplant.com/iexplorer/
希望這些資訊對大家有點幫助。