【IOS】IOS開發問題解決方法索引(四)

 

1       IOSNSTimer線程無法在委託方法之外停止

NSTimer無法在線程的委託方法之外停止。

 

2       在IOS4.3中添加AdSupport.framework會引起dyld ‘dyld_fatal_error

將庫引用參數設置爲可選即可解決。

3       Failed to get the task for process xxx

證書問題,project與target的調試證書都必須是開發者證書,ADHOC的證書會出現此問題。

4       IOS NSInvocation使用

NSInvocation的使用

http://www.cnblogs.com/pengyingh/articles/2359199.html

iOS 通知中心NSNotificationCenter & NSNotification

http://blog.csdn.net/crayondeng/article/details/9372079

 

5       UIPopoverController使用

UIPopoverController的使用

http://www.cnblogs.com/wengzilin/archive/2012/03/13/2393675.html

UIPopoverController的使用心得

http://blog.csdn.net/smking/article/details/7683363

 

6       Xcode條件編譯


 

條件編譯不是多高深的技術,卻很實用,可以幫助我們針對不同的target編譯出不同的版本。比如,希望同一份代碼編譯出完全版和功能受限的免費版,以減小維護成本。

首先要在某個project或者targetget info。在Build頁中,找到GCC 4.2 - Preprocessing下面的Preprocessor Macros,雙擊,在彈出來的對話框中增加一個值,例如FREE_VERSION。確定。

然後在代碼中加入如下語句:

#if!defined(FREE_VERSION)

...//do for fullversion

#else

...//do for freeversion

#end

 

7       Xcode利用宏區分模擬器與真機

Xcode 利用宏定義區分iphone模擬器和真機

http://blog.csdn.net/zypsg/article/details/5524623

 

#if TARGET_IPHONE_SIMULATOR

  label . text = @"iphoneSimulator" ;

#elif TARGET_OS_IPHONE

label . text = @"iphoneDevice" ;

#endif

 

8       IOS設備類型判斷

iOS 判斷設備類型

http://blog.sina.com.cn/s/blog_9c3c519b01013gdx.html

如何判斷 ios設備的類型(iphone,ipod,ipad)

http://blog.csdn.net/tangaowen/article/details/6525992

 

9       IOS中多版本,多設備類型支持注意事項

IOS中多版本,多設備類型支持注意事項

http://www.cnblogs.com/smileEvday/archive/2013/04/10/SDKCompatility.html

 

10    ”A valid provisioning profilefor this executable was not found“ 問題

 

”A valid provisioning profile for this executable was not found“ 問題google一下有很多答案,我在這裏總結一下我的經驗。從描述上可以看到說:對於可執行provisioning profile 沒有被找到。所以網上有很多答案是說你provisioning profile沒有被找到,需要重新導入之類的。

 

但是我碰到的原因是我在Project中將Code Signing Identity中將其設置成了iPhone Develop,但是在Target中的Code Signing Identity並沒有自動切換過來,我發現在Target中的Code Signing Identity還是我之前的設的iPhone Distribution,

所以看到這裏就知道了,iPhone Distribution provisioning profile肯定是不能運行的,所以把Target中的Code Signing Identity也設置成iPhone Developok了,這樣一切都說的通了,唯一不合理的就是在Project切換Code Signing Identity並編譯,但xCode沒有自動將編譯後的Target設置成和Project中的一致。

 

11    IOS使用模態框彈出子視圖後,子視圖大小設置

IOS SDK內建支持模態窗口式彈出方式(利用presentModalViewController方法),原理是將子視圖包含在一個模態視圖中,但是不足之處在於此模態視圖大小是固定的,爲540*620,若子視圖大小小於這個,周圍就會出現灰色邊緣。

要解決此問題,在執行完presentModalViewController方法之後,再次手動設置模態窗口大小:subVC.view.superView.frame

12    UIImageView加圓角

圖片要加圓角的做法在 iphone 3.0 變得很容易

imageThumbnail.image=[UIImageimageWithContentsOfFile:strPath];

imageThumbnail.layer.masksToBounds=YES;

imageThumbnail.layer.cornerRadius=10.0;

imageThumbnail.layer.borderWidth=1.0; //邊框陰影寬度

imageThumbnail.layer.borderColor=[[UIColorgrayColor] CGColor];

透過以上的程式碼就可以達到目的, 真是方便很多Orz. 請記得要import <QuartzCore/QuartzCore.h>

 

13    dequeueResuableCellWithIdentifier原理

dequeueReusableCellWithIdentifier原理 

http://ronglei0324.blog.163.com/blog/static/67633223201312631558212/

 

14    autolayout on ios Versions prior to 6.0

Auto Layout on iOS Versions prior to 6.0

http://blog.csdn.net/topbar/article/details/12345511

15    Xcode模擬器simulators7,6,5下載地址及安裝

1.下載鏈接

 

1

2

3

4

5

6

7

8

9

10

iOS7.0模擬器:

http://devimages.apple.com/downloads/xcode/simulators/ios_7_0_simulator.dmg

iOS6.1模擬器:

http://devimages.apple.com/downloads/xcode/simulators/ios_6_1_simulator.dmg

iOS6.0模擬器:

http://devimages.apple.com/downloads/xcode/simulators/iphone_6_0_iphonesimulatorsdk6_0.dmg

iOS5.1模擬器:

http://devimages.apple.com/downloads/xcode/simulators/iphone_5.1_iphonesimulatorsdk5_1.dmg

iOS5.0模擬器:

http://devimages.apple.com/downloads/xcode/simulators/ios_50_simulator-1.dmg

 

iOS 7 doc set 

http://devimages.apple.com/docsets/20130918/091-9917-A.dmg 

xcode 5 doc set 

http://devimages.apple.com/docsets/20130918/091-9915-A.dmg  

2. iOS模擬器的安裝

2.1常規安裝
Xcode
默認支持的iOS模擬器的在線安裝,啓動Xcode5.1後打開菜單Xcode->Preferences...再點擊Downloads就可以看到Xcode默認支持的iOS各版本模擬器,如果還沒有安裝,只需要點擊後面的下載箭頭標識,Xcode就會自動下載和安裝相應的組件,因爲需要下載和安裝,可能需要等待較長時間才能完成下載和安裝。

另外,下載的臨時文件存放在/Users/<username>/Library/Caches/com.apple.dt.Xcode/Downloads目錄中。

2.2第三方下載器下載後安裝
但是往往用xcode自動下載模擬器會非常慢或者經過很長一段時間後提示Failed to mount file 什麼的
這時候就可以找到下載鏈接用下載器進行下載,進入目錄

/Users/<username>/Library/Caches/com.apple.dt.Xcode/Downloads  5dba03a4b33ac2c0d7a72e94475011c25eb06a73.dvtdownloadableindex 類似文件重命名成.plist後綴文件(com.apple.dt.Xcode 要右鍵顯示包內容進入,不要雙擊打開)

找到downloadables某個item尋找 dmg  source下載地址
可以找到simulator dmg明顯字樣的鏈接下載即可(文章開頭的鏈接就是取自plist文件)

2.3下載後的dmg安裝.這裏主要以iOS7.0模擬器的離線安裝爲例進行說明,其他版本以此類推:

下載ios_7_0_simulator.dmg後打開dmg文件,可以看到安裝包iPhoneSimulatorSDK7_0.pkg,使用安裝器安裝此安裝包,默認會安裝在所選分區的/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk目錄下,完全退出Xcode後將剛纔安裝的iPhoneSimulator7.0.sdk整個目錄複製或移動到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs目錄下即可,(Xcode.app右鍵可以"顯示包內容“)重新啓動Xcode一般就可以使用相應版本的模擬器進行開發和調試了。

離線安裝還有一個簡單的辦法就是將以前安裝過的舊版本的XcodeXcode5.0.2下面已經安裝好了的iOS模擬器直接複製過來使用,目錄位置都一樣,都是在Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs裏面。這樣就不用再下載離線安裝包了。

 

16    iOS:忘記密碼或輸入錯誤密碼後設備停用

當您在設置密碼確保安全使用iPhone、iPad 或 iPod touch 後輸入了錯誤的密碼,可能會看到設備“已停用”的消息。瞭解如果您已忘記或不記得自己的密碼或者設備顯示“已停用”的消息時應如何處理。

如果您輸入錯誤密碼六次或以上,將看到以下任一消息:

§  iPhone 已停用

§  iPad 已停用

§  iPod touch 已停用

如果您之前將設備與 iTunes 同步過,您或許能夠通過恢復設備來重設密碼:

1.     將設備連接到通常與之同步的電腦,然後打開 iTunes
注:如果 iTunes 提示您輸入密碼,請嘗試已經與其同步的另一臺電腦。否則,請前往下文如果您從未將設備與 iTunes 同步,或沒有權限訪問電腦部分。

2.     如果設備仍處於停用狀態,或者 iTunes 沒有自動同步您的設備,請將設備與 iTunes 同步。

3.     備份和同步完成後,請恢復您的設備。

4.     iOS 設置助理要求設置設備時,請選取iTunes 備份恢復

5.     iTunes 中選擇您的設備,然後選取最近的設備備份。

 

如果您從未將設備與 iTunes同步,或沒有權限訪問電腦

如果您看到以下警告之一,則需要抹掉設備上的數據:

“iTunes 未能連接到 [設備],因爲它已被使用口令鎖定了。您必須在 [設備] 上輸入口令,然後才能與 iTunes 配合使用它。
您尚未選擇讓 [設備] 信任此電腦

如果您已啓用查找我的 iPhone,則可以使用遠程擦除來抹掉設備上的內容。如果您已使用 iCloud 來備份,或許能在抹掉設備內容後恢復最新的備份並重設密碼。

或者,將設備置於恢復模式並將其恢復以抹掉設備上的內容:

1.     斷開 USB 線纜與設備的連接,但保持線纜的另一端與電腦的 USB 端口相連。

2.     關閉設備:按住睡眠/喚醒按鈕數秒,直到出現紅色滑塊,然後滑動該滑塊。等待設備關閉。

3.     按住主屏幕按鈕,同時將 USB 線纜重新連接到設備。設備應會打開。

4.     繼續按住主屏幕按鈕,直到出現連接iTunes”屏幕。

5.     iTunes 將提醒您,其檢測到一個處於恢復模式的設備。點按,然後恢復設備。

其他信息

瞭解有關設置和使用密碼的信息。

您可以將設備配置爲在連續十次輸入錯誤密碼後自動抹掉。此設置在默認情況下未啓用。可通過輕按設置”>“密碼鎖定來打開此設置。

17    block避免循環引用

由於我們很多行爲會導致Blockcopy,而當Blockcopy時,會對block中用到的對象產生強引用(ARC)或者引用計數加一(non-ARC)

如果遇到這種情況:

1

2

3

4

5

6

7

8

9

@property(nonatomic, readwrite, copy) completionBlock completionBlock;

 

//========================================

self.completionBlock = ^ {

        if (self.success) {

            self.success(self.responseData);

        }

    }

};

對象有一個Block屬性,然而這個Block屬性中又引用了對象的其他成員變量,那麼就會對這個變量本身產生強應用,那麼變量本身和他自己的Block屬性就形成了循環引用。在ARC下需要修改成這樣:

1

2

3

4

5

6

7

8

9

@property(nonatomic, readwrite, copy) completionBlock completionBlock;

 

//========================================

__weak typeof(self) weakSelf = self;

self.completionBlock = ^ {

    if (weakSelf.success) {

        weakSelf.success(weakSelf.responseData);

    }

};

也就是生成一個對自身對象的弱引用,如果是倒黴催的項目還需要支持iOS4.3,就用__unsafe_unretained替代__weak。如果是non-ARC環境下就將__weak替換爲__block即可。non-ARC情況下,__block變量的含義是在Block中引入一個新的結構體成員變量指向這個__block變量,那麼__block typeof(self)weakSelf = self;就表示Block別再對self對象retain啦,這就打破了循環引用。

 

Block的引用循環問題 (ARC& non-ARC)

http://www.hrchen.com/2013/06/retain-cycle-in-block/

a-look-inside-blocks-episode-1

http://www.galloway.me.uk/2012/10/a-look-inside-blocks-episode-1/

a-look-inside-blocks-episode-2

http://www.galloway.me.uk/2012/10/a-look-inside-blocks-episode-2/

a-look-inside-blocks-episode-3

http://www.galloway.me.uk/2013/05/a-look-inside-blocks-episode-3-block-copy/

 

18    runloop

(good)Objective-C之run loop詳解

http://blog.csdn.net/wzzvictory/article/details/9237973

 

(good)iOS多線程編程指南(三)Run Loop

http://www.dreamingwish.com/dream-2012/ios-multithread-program-runloop-the.html

 

 

19    iOS多線程開發指南

iOS多線程開發指南

http://www.dreamingwish.com/dream-category/toturial/ios-mulit-thread-program-guide

 

iOS多線程編程指南(一)關於多線程編程

http://www.dreamingwish.com/dream-2012/ios-multi-threaded-programming-a-multi-threaded-programming.html

iOS多線程編程指南(二)線程管理

http://www.dreamingwish.com/dream-2012/ios-multi-threaded-programming-the-thread-management.html

iOS多線程編程指南(三)RunLoop

http://www.dreamingwish.com/dream-2012/ios-multithread-program-runloop-the.html

iOS多線程編程指南(四)線程同步

http://www.dreamingwish.com/dream-2012/the-ios-multithreaded-programming-guide-4-thread-synchronization.html

           

20  GCD(Grand Central Dispatch)教程

發佈者:Seven's 2012/03/03 - 分類:夢印象

Grand Central Dispatch或者GCD,是一套低層API,提供了一種新的方法來進行併發程序編寫。從基本功能上講,GCD有點像NSOperationQueue,他們都允許程序將任務切分爲多個單一任務然後提交至工作隊列來併發地或者串行地執行。GCD比之NSOpertionQueue更底層更高效,並且它不是Cocoa框架的一部分。

入門教程:

  1. GCD介紹(一): 基本概念和Dispatch Queue
  2. GCD介紹(二): 多核心的性能
  3. GCD介紹(三): Dispatch Sources
  4. GCD介紹(四): 完結

進階:

  1. GCD實戰一:使用串行隊列實現簡單的預加載
  2. GCD實戰二:IO資源競爭
發佈了44 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章