tag:blogger.com,1999:blog-84491175822823464332024-03-05T18:40:07.492+08:00於是就這麼回事Unknownnoreply@blogger.comBlogger30125tag:blogger.com,1999:blog-8449117582282346433.post-61149209480851412932012-06-12T11:56:00.002+08:002012-06-12T11:56:53.728+08:00iOS 6 beta新API初探下大雨放假了
沒事來看一下昨天WWDC公布的iOS 6:
好像只有開發者可以看,不知道寫了會不會被抓去關,簡單記錄一下一些基本元件:
dictionary跟array都多了index/key的Subscript:,還不太懂跟objectAtIndex有什麼不同
好多class的coding都變成NSSecureCoding
多了一個UUID class,真是可喜可賀
多了PassKit
NSCoder可以指定class,看來可以少寫些decoder?
MapTable,地圖API應該有不少新東西
HashTable,沒reference,應該還在開發中
tableView多了一些特定cell reuse的方法
tableView的footer跟header好像自由度變高了,也多了好幾個delegate method
view跟viewController多了不少跟動畫、旋轉有關的Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-83601553967964640082012-04-27T00:24:00.000+08:002012-04-27T00:24:00.156+08:00X Code@Lion三指切換header/source(.h/.m)的方法雖然Lion都出這麼久了,不過應該還是可以寫一下
剛從雪豹升級到Lion,發現三指向上的手勢被換成切桌面,看code實在很不方便,就google一下
在stackoverflow看到這篇:
http://stackoverflow.com/questions/6771057/trackpad-gesture-to-switch-to-header-source/7923619#7923619
文中說Xcode 4.2有修正,不過我的4.3還是不能切,照著下面做了
1.切到要修改的檔案的所在目錄開終端機,輸入:cd /Users/[使用者名稱]/Library/Preferences/ByHost
2.用ls -lah找出要修改的檔案
應該會找到一個.GlobalPreferences.XXXX-XXXX-XXXX-XXXX.plist,X由一串英文數字組成
3.用Xcode開啟該檔案(或Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-5413734627536786712012-02-22T01:04:00.000+08:002012-02-22T01:04:28.046+08:00Certificate, Provisioning file, code signed整理好了就來貼一下:
Apple iOS developer的帳號可分為兩種:
個人開發:99 USD/年,可部屬App到最多100台開發用裝置上
企業用: 299 USD/年,需企業資格,不可上架,但可部屬App到任意裝置上(也有100台開發用裝置Quota)
可參考https://developer.apple.com/programs/ios/enterprise/
帳號權限分Agent跟Admin,Agent只有一個,可是Admin可以有好幾個
只有Agent可以進行上架
Certificate
取得帳號後可到Portal中產生Certificate
Certificate用來認證開發者的身份,也是讓App可以安裝到裝置的要素之一
和電腦綁定,如果需轉移的話可以匯出成.p12檔複製到目標電腦去
分為Developer和Distribution,只有Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-35694506413128963292011-12-28T23:51:00.001+08:002011-12-28T23:52:56.752+08:00iOS developer實機開發前二三事雖然不太難
不過圖都截了就來寫一寫
說明一下繳了保護費後到開始寫程式前的準備:
1.先登入http://developer.apple.com/,然後進到iOS Provisioning Portal
選取左邊Certificate,網頁會有一連串說明
2.接下來要取得certificate,讓認得準備拿來開發的MAC:
工具程式->鑰匙圈存取->憑證輔助程式->從憑證授權要求憑證
3.輸入E-mail、使用者名稱
比較重要的是:把"已將要求"選擇"儲存到磁碟",下一步後把產生的.cer檔存起來
4.網頁最下面可以找到submit,上傳剛剛的.cer檔後,頁面會跳轉,
如果certificate檔的狀態在pending,重整網頁應該就會變成active可下載的狀態了
5.下載後點兩下,憑證就會被加入,代表認證完成了
6.接下來要產生一個Team Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-45761901375894820722011-11-14T19:07:00.001+08:002011-11-17T11:53:08.493+08:00iOS 5 data storage的改變
由於iOS 5加入了iCloud的備份機制,資料儲存的規則多了一些規範
以下整理一下新的政策:1. Critical Data:只有user自行加入、或無法重新取得的檔案可以放在/Document底下,會被iTunes和iCloud備份2. Cached Data:可重新產生、下載的檔案,如書籍、音樂要放在/Library/Caches,不會被備份,low storage situations時會被清除3. Temporary Data:暫存檔放在/tmp,Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-55344043162270999252011-10-15T02:19:00.002+08:002011-11-10T15:05:53.103+08:00UIWebView自定user agent不知道忙什麼一個月就過去了
記錄一下有關自訂user agent的問題
一般request的自訂user agent可經由NSMutableURLRequest的函式達到:[request setValue:userAgentString forHTTPHeaderField:@"User-Agent"];
自訂一般UIWebView的request基本上也可以先定義好request後再由webview loadRequest:載入即可但如果要保有UIWebView裡原本request的user agent,再加入自訂的值,事情就比較麻煩一點
UIWebView預設的user agent大概長這樣:
Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/534.32 (KHTML, like Gecko) Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-31702912409870265272011-09-08T19:18:00.000+08:002011-09-08T19:18:59.943+08:00XML Parser心得分享(2)-TBXML另外一套是蠻多人推薦的TBXML
主要用法就是讀入檔案,然後用[TBXML elementName:element], [TBXML textForElement:element]取值
詳細可參照TBXML網站
因為開始第一次用,而且每次都要針對新的XML重新寫一遍delegate覺得很麻煩
就找了一下資料 ,後來參照了iOS下超级簡潔的xml解析框架:TBXML
修改了一下原始碼如下:
- (void)parse{
if (xmlData.rootXMLElement) {
TBXMLElement *element = xmlData.rootXMLElement;
[self recurrence:element];
}
else {
NSLog(@"Format Error!");
}
}
//遞迴
- (void)recurrence:(TBXMLElement *Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-88300291025205875952011-08-29T00:06:00.003+08:002011-08-29T00:07:26.352+08:00XML Parser心得分享(1)-NSXML有網友留言問到XML處理,就把之前的草稿完成一下
怕文章太長不好讀,拆成兩篇寫
寫到現在遇過挺多處理case要xml資料
目前用過的XML parser有內建的NSXML和TBXML
這篇先簡單說明一下NSXMLParserDelegate三個重要的函式:
以下是一個XML 範例:來自W3C school.com
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
Don't forget me this weekend!
</note>
當讀到start tag的時候觸發這個delegate:
- (void)parser:(NSXMLParser *)Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8449117582282346433.post-13300934697008634852011-08-23T21:45:00.000+08:002011-08-23T21:45:36.026+08:00兩個目前遇過的iOS 5 SDK crash bug紀錄一下兩個升級iOS 5 SDK後遇到的error:
1. iOS 5好像還不太支援UIActivityIndicatorView
錯誤訊息:-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760'
參考自:http://stackoverflow.com/questions/7023430/Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-8449117582282346433.post-1023070299355948542011-08-16T00:22:00.000+08:002011-08-16T00:22:40.437+08:00iOS 5關閉特定檔案的ARC這篇文章參考以下影片完成:IOS5 -- How To Turn Off ARC On Individual Files從iOS 4到iOS 5首先要面對的就是新增的automatic reference counting(第一次開專案看到release被deprecate有嚇到:P)
iOS 5新專案有ARC,但舊的code卻沒有,筆記一下關閉特定檔案ARC的作法:以(Xcode 4為例)
點選專案檔,選target,在Build Phase中找到compile source
選取需要關閉ARC的檔案,按下ENTER鍵,就可以編輯額外的編譯Flag
輸入-fno-objc-arc後按確定,就會像下面這樣:
這樣就不會有ARC的編譯錯誤了
(範例是sharekit,好用的分享library,如透過email、facebook分享)Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-8449117582282346433.post-24654693516758493452011-08-11T00:30:00.000+08:002011-08-11T00:30:39.028+08:00NSArray排序筆記本來以為這種功能要自己實做的
沒想到iOS SDK關於array的排序還挺簡單的
整理幾個基本的常用用法:
1.字串(NSString)、日期(NSDate)排序
2.使用NSSortDescriptor達到降冪排序
3.元素為自訂物件的排序
1.字串、日期排序
[DataArr sortedArrayUsingSelector:@selector(compare:)]
可用在有現成比較函式class,如NSString或NSDate
如上例應用在NSString的compare:會輸出升冪排序
自訂物件的話應該也可以自行imperment 函式來比較物件
但有更簡單的方式,可參考第三項
2.使用NSSortDescriptor達到降冪排序
第一點中輸出的排序預設為升冪排序,要改成降冪可運用NSSortDescriptor
NSSortDescriptor可運用在以下情形:Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-92182566861235474942011-07-14T22:53:00.001+08:002011-08-11T00:39:30.598+08:00iOS幾個UI應用整理整理幾個比較特別的UI用法:
自訂UITableViewCell的選取顏色
關閉UIWebView的scroll功能
移除 UISearchBar背景色
UIColor自訂顏色注意事項
取得iPad, iPhone解析度
自訂UISegmentControl背景色
1.Custom UITableViewCell selected color
UIView *selectBgv=[[UIView alloc]init];
selectBgv.backgroundColor=[UIColor lightGrayColor];
cell.selectedBackgroundView=selectBgv;
[selectBgv release];
要注意的是,UITableViewStylePlain下cell.selectedBackgroundView是NIL,要自己Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-43728286228691256232011-07-10T23:44:00.000+08:002011-07-10T23:44:32.210+08:00CFWriteStreamOpen連線建很久把前陣子遇到的問題筆記一下 :
前陣子嘗試著要做iOS裝置間訊息的傳遞
一開始找到了這個聊天室的範例:
http://mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/
用Bonjour network發佈服務,傳輸部份則用CFStream來完成
run範例後跑起來有個問題:選擇了聊天室後,連線卻要等1分鐘左右才會建立
設了一些NSLog都跑完了,也可以打字,不過傳輸的文字還是傳不過去
但一分鐘後連線建立,聊天訊息傳遞得很順暢且很即時
後來看官方文件CFNetwork Programming Guide
在Working with Streams的Preventing Blocking When Working with Streams一段裡面
才知道問題:
CFWriteStreamOpen(Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-21056168234255992852011-06-28T00:08:00.000+08:002011-06-28T00:08:08.704+08:00數位閱讀軟體開發雜談一些閱讀開發的淺談,本來寫一寫想投稿試試的,結果一直忘了寄出去,有些東西不貼就要過期了,只好貼這邊吧。電子書熱潮自從2007年年底amazon kindle發表,具備了超過半個月待機、顯示不耗電、反光設計、適合長時間閱讀的電子墨水(e-ink)技術,帶起了電子書及數位閱讀的熱潮,各家廠商 紛紛推出自行開發的閱讀裝置及軟體,裝置也從黑白發展到彩色,最近甚至有可以捲一捲收起來、怎麼折都折不壞的新一代電子紙出現。
電 子紙系列裝置強調待機時間長、提供良好的閱讀舒適度,固然有一票的愛好者。然而,iPad發表帶起的平板電腦熱潮讓數位閱讀市場有了新的思維,平板電腦多 媒體的特性開闢了數位閱讀更多的可能性,讓數位閱讀除了文字圖片的呈現之外,可以有影音、動畫、甚至重力感應(G-sensor)等更多的使用者互動元 素。
數位閱讀軟體的開發目前最為流通的電子書為國際數位出版論壇(IDPF)所制定的epubUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-44575864852596823252011-06-23T23:02:00.000+08:002011-06-23T23:02:39.501+08:00In-app purchase和server測試的注意事項之前有用到就整理起來,主要針對開始撰寫程式前需要的準備事項
改天再針對程式方面發一篇
整個過程,主要可以分成三種角色:Apple、商品提供者、程式開發者
下面列一下各個方面的一些注意事項:
商品提供者 to Apple
請先繳保護費,購買一個apple developer帳號:http://developer.apple.com
申請過後需至https://itunesconnect.apple.com/的 Manage Your Applications登錄,然後送出app相關資訊(這邊送出還不需要上傳程式,但送出後像是APP name的相關資訊就不能改了)
在Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8449117582282346433.post-69399517936776379662011-06-17T09:38:00.000+08:002011-06-17T09:38:09.048+08:00iOS App開啟載入的圖片(launch image)如何替iOS App加入一個啟動時的載入圖片?
只要把圖片存成下列檔名後,加入專案中即可:
Default.png 320*480 iPhone, iPod
Default@2x.png 640*960 iPhone, iPod Retina Display
Default.png iPad Portriat
Default-Portrait.png 768*1004 iPad Portrait
Default-Landscape.png 1004*768 iPad Landscape
在xcode 4開始更簡單,只要在project或target裡Summary->Launch Images右鍵就可以直接加了
以為很麻煩的功能,其實Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-91898258674985040812011-06-13T17:58:00.001+08:002011-06-16T22:26:51.993+08:00iOS 5 beta SDK touble shooting如果有用到libz.1.2.3.dylib這個framework(例如ASIHTTP)
iOS SDK升級到5 beta會遇到下列錯誤:
ld: library not found for -lz.1.2.3
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
或是用了ASIHTTP:
Undefined symbols for architecture armv7:
"_crc32", referenced from:
_unzReadCurrentFile in Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8449117582282346433.post-89031656005578714722011-05-17T23:25:00.002+08:002011-06-16T22:41:49.735+08:00iOS keychainWrapper trouble shooting之前把一個project用官方提供的Keychain Services加上了自動記憶帳號密碼的功能
一直都正常運作,直到某一天一台裝置忽然跑出了不該出現的assert:
NSAssert(SecItemAdd((CFDictionaryRef)
[self dictionaryToSecItemFormat:keychainData],NULL) == noErr, @"Couldn't add the Keychain Item." );
當機,帳號密碼存不起來想說嘗試著要把舊的刪掉加新的看看:
SecItemDelete((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainData]));
結果錯誤訊息是-25300(errSecItemNotFound, The item cannot be found.)
然後試了:
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-37667194958648966892011-04-25T00:32:00.001+08:002011-04-25T00:47:34.888+08:00UIWebView local file注意事項不是什麼大問題,卡了關留個紀錄
1.加入檔案時,選Create folder reference for any added folders才會建立相對資料夾
否則雖然看到有個資料夾,build到機器上檔案還是全解在根目錄
2.load網頁的方法
下面混用了不同兩種的載入方式,嘗試把可能的寫法都包上去:
UIWebView *displayWebView=[[UIWebView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
//用loadData:MIMEType:textEncodingName:baseURL:
NSString *resPath=[[NSBundle mainBundle]pathForResource:@"demo_1" ofType:Nil];
[displayWebView loadData:[Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-85205642443991100742011-04-13T00:08:00.002+08:002011-04-25T00:49:31.967+08:00message sent to deallocated instance 除錯常常程式一長,哪邊就不小心多release了一次
這時候編譯器就只會告訴你:BAD_ACCESS,然後程式就死了
剛開始會google到去Argument加個NSZombieEnabled YES
會多吐一點東西讓你把bug除掉
今天遇到加了這個後error message變:
[CALayer release]:message sent to deallocated instance 0x4dd650
layer這麼多怎麼知道哪裡出問題阿???
google了一下才找到解法:
1.在Argument裡面加入這三個參數:
NSZombieEnabled YES
MallocStackLogging YES
MallocStackLoggingNoCompact Yes
第一項可監控deallocated的記憶體,給更多的錯誤訊息
第二項可開啟MallocStack,就知道記憶體在程式Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-8449117582282346433.post-25123684594680720892011-03-23T22:47:00.003+08:002011-04-25T00:49:54.167+08:00objective-c:delegatedelegate應該可以翻成指派、委派
是我剛開始學objective-c比較難理解的東西
大概有觀念後就覺得拿來餵資料或其他十分的便利
常常會有A interface裡面宣告了interface B的狀況
然後B有一些工作會需要A的其他成員幫忙完成
假設A有成員C、D、E
然後B的一些函式會需要存取這些參數,甚至是函式,傳來傳去實在很麻煩
比如說在B的.m檔會有函式:
-(void)print{
[self printfC];
[self printDplusE];
}
但這些資料需要來自A
就會有B把這些存取過程委託給A用法,
首先B要先訂出一些protocol,告知哪些事情需要A幫忙,然後還需要定義一個delegate變數
這個宣告會在interfaceB的.h檔:
@interface interfaceB{
id delegate;
}
@property (Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8449117582282346433.post-68816271014591918322009-05-03T23:52:00.002+08:002009-05-04T00:05:15.561+08:00新增plurk阿阿阿~結果四月就這麼空白過去了五月多貼幾篇好了看到很多人在玩plurk所以也去弄了一個來玩,不然一個一個看真的很麻煩就順便嵌在這邊了不過嵌入blogger實在太無痛了,沒啥好寫的...Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-53801447872193844772009-03-29T23:10:00.005+08:002011-04-25T00:50:45.458+08:00[遊]想知道的事-內灣所謂改變就是力量
所以三月要多發一篇
這篇其實也一整個拖稿拖很大
來寫上次去內灣想知道的事:
野薑花
因為上次去內灣吃到了這家很好吃的野薑花粽
所以想知道為什麼內灣野薑花料理有名,於是問了內灣林業展示館
根據裡面的導覽阿姨說
野薑花是靠著水邊生長的
台灣野生植物資料庫:查詢關鍵字 野薑花
於是內灣這邊的客家人就把野薑花做為食材
道地一點的野薑花粽還會讓米充分帶有野薑花的香氣
(印象中是拿某個部位浸,不過也查到了加野薑花根的粉末這種說法)
有些偷懶的店家就只有拿野薑花葉把粽子包一包就賣了
以下是工商服務時間:
內灣范阿嬤野薑花粽
地址:新竹縣橫山鄉內灣村中正路11號
(內灣老街靠近內灣吊橋的那一頭)
電話:0937409752
野薑花粽一顆15元,滿200顆免運費
縣120(待考)
逛老街的時候,邊走邊看到公里數的牌子
所以老街是在縣道上?縣道變成徒步區?
回來查了好一會,好像Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-41007587616577142272009-03-04T11:13:00.009+08:002009-04-22T15:21:08.603+08:00參考文獻格式相關之前被這種東西快搞瘋了,留個筆記期刊論文:Authors, “Paper Title,”Journal Title, vol. XX, no.XX, pp.XXX-XXX, Month, Year.會議論文:Authors, “Paper Title,”Proceedings of Conference Name, City, State, Country, Month, Year.書籍:Authors, Book Name, Version, Publisher, Month, Year.Authors注意事項:名寫前姓寫後,名縮寫姓不縮寫[4/22] 新增專利部份1.序號2.申請人或單位名稱3.專利名稱4.專利編號5.核准年份其中:(1)每項之間以逗號(,)分開,中文者用全形逗點(,)分開(2)核准年份加上小括弧例:L.abc and H.cde, patent title, U.SUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-8449117582282346433.post-58124263088021871002009-02-10T23:06:00.004+08:002011-04-25T00:51:11.723+08:00android SDK trouble shooting整理一下遇過的問題和相關文件吧
官網文件:
http://code.google.com/intl/zh-CN/android/intro/installing.html
裡面有些簡單的錯誤排除
比較容易遇到的就是安裝好Eclipse後,設定ADT plugin
https://dl-ssl.google.com/android/eclipse/
有時候會連不到
http://dl-ssl.google.com/android/eclipse/
還有Eclipse一定要裝3.3以上版本
(目前ubuntu包的套件是3.2...Orz)
好不容易連上了,可能會遇到這個
Preference page錯誤訊息
Unable to create the selected preference page. An error occurred while
automatically Unknownnoreply@blogger.com0