iOS 開發百問(1)

2021-06-20 20:21:07 字數 3221 閱讀 9317

1、設定 imagepicker 的大小

imagepicker 在 popover controller 總是以預設大小顯示,設定 popovercontentsize 屬性似乎無用。解決辦法是將imagepicker 「包含」到乙個定製的 viewcontroller 中,然後再 presentpopover 這個 viewcontroller :

uiviewcontroller *containercontroller = [[uiviewcontroller alloc] init];

containercontroller.contentsizeforviewinpopover = cgsizemake(600,self.view.frame.size.height);

[containercontroller.viewaddsubview:_imagepicker.view];

_popcontroller= [[uipopovercontroller alloc] initwithcontentviewcontroller:containercontroller];

cgpoint p=[self.view convertpoint:button.center

fromview:sender.superview];

[_popcontroller presentpopoverfromrect:(cgrect)

inview:self.view

permittedarrowdirections:uipopoverarrowdirectionany

animated:yes];

[_imagepicker.view setframe:containercontroller.view.frame];// 很重要

注意,popover的寬度最多600。此外,_imagepicker 每次 presentpopoverfromrect 之前都必須 init一次,否則顯示位置不正確。

2、上傳檔案中文檔名亂碼問題

在ios客戶端將檔名用url encode編碼,然後在服務端用url decode解碼。

客戶端:

nsstringencodingenc=nsutf8stringencoding;

[request setdata:datawithfilename [filename stringbyaddingpercentescapesusingencoding:enc]

服務端:

string filename=request.getparameter(「upload_file」);

filename=urldecode.decode(s,」utf-8」);

3、mac 64 bit device

有時從svn更新工程後,scheme會顯示為mac 64 bit device,並且不允許執行程式。這時只需要重新設定一下target的deploymenttarget就好(設定為模擬器或除錯裝置)。

4、去除除錯程式的nslog

編譯引數optimize level根據不同的版本設定。例如對於debug版本是none,對於release版本是fastest,smallest。這樣,我們可以根據這個引數來重新定義nslog函式:

#ifndef __optimize__

#define nslog(...)nslog(__va_args__)

#else

#define nslog(...) {}

#endif

5、警告:no previous prototye for function

根據c規範, 如果函式沒有引數,使用void作為函式引數。

函式宣告應使用 「void functiona(void);」,而不能是」void functiona();」.

6、陣列排序

方法一:

- (nscomparisonresult)compare:(person *)otherobject {

return [self.birthdatecompare:otherobject.birthdate];

nsarray *sortedarray;

sortedarray = [drinkdetails sortedarrayusingselector:@selector(compare:)];

方法二:

nssortdescriptor *sortdescriptor;

sortdescriptor = [[[nssortdescriptor alloc]initwithkey:@"birthdate"

ascending:yes] autorelease];

nsarray *sortdescriptors = [nsarray arraywithobject:sortdescriptor];

nsarray *sortedarray;

sortedarray = [drinkdetails sortedarrayusingdescriptors:sortdescriptors];

方法三( 10.6+):

nsarray *sortedarray;

sortedarray = [drinkdetails sortedarrayusingcomparator:^(id a, id b) {

nsdate *first =[(person*)a birthdate];

nsdate *second =[(person*)b birthdate];

return [firstcompare:second];

7、xcode 4的build目錄在**?

8、警告:no rule to process file

xcode試圖偵測每一種檔案的型別。當它認為檔案屬於「原始檔」型別(比如.js檔案),總是試圖將它加到compile sources中並試圖編譯。解決這個警告的辦法是,把這類檔案從build phases的 compile sources移到 copy bundle resources中。

9、警告:'initwithframe:reuseidentifier:'is deprecated

該方法在後續版本中將被拋棄。請使用

-initwithstyle:reuseidentifier:

10、itms-services不工作

如果你處於intranet中,請檢查是否可訪問上述位址。如果不能,你將無法使用ota來安裝應用程式。要求ios 4.0以上。

iOS開發之UITableView優化問題

你會對tableview的層次結構和用法有詳細的認識。不得不說的tableview中cell復用原理 檢視內部維護了乙個cell的復用佇列,每次需要新的cell時,可以先從佇列中根據復用標識尋找是否有空閒的cell,若有則直接出列使用無需建立新的 若沒有可用cell則需要建立新的。檢視上的cell離...

iOS開發技巧(1)

這個系列的文章只是簡單地把開發過程中的一些技巧總結起來,方便以後查閱。exclusivetouch是uiview的乙個屬性。exclusive是 獨家 的意思,所以這個方法的作用就是把某個uiview的觸碰事件設定為獨家事件,即如果多個設定了exclusivetouch的uiview被同時點選,則只...

iOS 開發 WKWebView快取處理的問題

wkwebview使用中遇到的問題 1.關於快取的問題 因為使用了wkwebview,後端的策劃人員換圖,ios端沒有更新,然後google了好久,最終算是解決了這個問題。首先,載入第乙個頁面。urlstr 設定快取的請求策略和超時時間 nsurlrequest urlreuqest nsurlre...