開(kāi)發(fā)過(guò)程中或多或少會(huì)碰見(jiàn)一些問(wèn)題和紀(jì)要梯醒,感覺(jué)有必要記下來(lái)苗踪,避免下次再犯郭宝,此文章后續(xù)會(huì)更新...
iOS app通過(guò)itunes共享文件
在程序的配置文件中添加Application supports iTunes file sharing
,設(shè)置為YES盅粪;這里共享的是沙河的Document目錄DZNEmptyDataSet使用心得
同mj刷新一起使用的時(shí)候咏删,一定要先endrefresh方法,然后再去刷新tableview拣凹,因?yàn)镈ZNEmptyDataSet是在reload數(shù)據(jù)的時(shí)候獲取tableview的偏移和bounds森爽,然后去設(shè)置空視圖的位置的,如果先reload嚣镜,則會(huì)導(dǎo)致空視圖空視圖顯示出來(lái)的時(shí)候往上偏了54像素爬迟,54從哪里冒出來(lái)的呢?全局搜了一下菊匿,發(fā)現(xiàn)mj刷新正在pulling的時(shí)候正好54付呕。個(gè)人認(rèn)為開(kāi)發(fā)中涉及到系統(tǒng)權(quán)限的應(yīng)該統(tǒng)一放在一起,放在一個(gè)文件中跌捆。
-
CocoaLumberjack 自定義logger輸出樣式
- 首先自定義一個(gè)類似DDLogFileFormatterDefault的formatter作為格式輸出徽职,實(shí)例化一個(gè)fomatter;
- 自定義一個(gè)ddloger佩厚,繼承于DDAbstractDatabaseLogger,重載db_log姆钉、db_save,添加post服務(wù)器方法;將第一步創(chuàng)建的formatter賦值給ddloger的formatter屬性可款;
- nslog打印
注意:
DDLog:基礎(chǔ)類育韩,必須引入的。
DDASLLogger:支持將調(diào)試語(yǔ)句寫入到蘋果的日志中闺鲸。一般正對(duì)Mac開(kāi)發(fā)筋讨。可選摸恍。
DDTTYLogger:支持將調(diào)試語(yǔ)句寫入xCode控制臺(tái)悉罕。我們即使要用它赤屋。可選壁袄。
DDFileLogger:支持將調(diào)試語(yǔ)句寫入到文件系統(tǒng)类早。可選嗜逻。
DDLog的輸出級(jí)別默認(rèn)提供以下若干種:
DDLogError:定義輸出錯(cuò)誤文本
DDLogWarn:定義輸出警告文本
DDLogInfo:定義輸出信息文本
DDLogDebug:定義輸出調(diào)試文本
DDLogVerbose:定義輸出詳細(xì)文本提供的日志級(jí)別為:
LOG_LEVEL_ERROR:只顯示錯(cuò)誤日志涩僻。
LOG_LEVEL_WARN:包括:LOG_LEVEL_ERROR
LOG_LEVEL_INFO:包括:LOG_LEVEL_WARN
LOG_LEVEL_DEBUG:包括:LOG_LEVEL_INFO
LOG_LEVEL_VERBOSE:包括:LOG_LEVEL_DEBUG
LOG_LEVEL_OFF:關(guān)閉日志
level = LOG_LEVEL_VERBOSE的時(shí)候,以上所有的level的打印日志都會(huì)進(jìn)行打印栈顷,在appdelegate中添加多少個(gè)logger逆日,就會(huì)形成幾種情況的日志,譬如:文件萄凤、數(shù)據(jù)庫(kù)室抽、控制臺(tái)等,添加自定義的之后便會(huì)增加一種日志形式(自定義的上傳給服務(wù)器的日志)
問(wèn)題:- 日志文件logger只會(huì)存入error和warning的日志嗎靡努?
- 日志文件只有一個(gè)嗎坪圾?如果不是,什么時(shí)候就會(huì)創(chuàng)建惑朦?
-
category中添加成員變量
.h@property (nonatomic, retain) LBEmptyPageView * emptyView; @property (assign, nonatomic) BOOL showNetError;
static const void * emptyViewKey = &emptyViewKey; @implementation BaseViewController (EmptyDataSet) - (LBEmptyPageView *)emptyView { return objc_getAssociatedObject(self, &emptyViewKey); } - (void)setEmptyView:(LBEmptyPageView *)emptyView { objc_setAssociatedObject(self, emptyViewKey, emptyView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (BOOL)showNetError{ return [objc_getAssociatedObject(self, _cmd) boolValue]; } - (void)setShowNetError: (BOOL)showNetError{ objc_setAssociatedObject(self, @selector(showNetError), @(showNetError), OBJC_ASSOCIATION_ASSIGN); }
category使用原則:
- category的實(shí)現(xiàn)可以依賴主類兽泄,但主類一定不依賴category,也就是移除一個(gè)category的代碼不會(huì)對(duì)主類產(chǎn)生影響
- category可以直接食用主類已有的私有成員變量行嗤,但不應(yīng)該為實(shí)現(xiàn)catecory而在主類中添加成員變量已日,考慮通過(guò)上述的方式實(shí)現(xiàn)垛耳。
在用xib自定義tableview的頭部時(shí)候栅屏,有時(shí)會(huì)出現(xiàn)當(dāng)我NSbundle實(shí)例化之后改變它的frame不管用,這個(gè)可能xcode的bug或者是緩存問(wèn)題堂鲜,刪掉重新搞
之前碰到一個(gè)問(wèn)題就是缺少庫(kù)的問(wèn)題栈雳,第一次顯示缺AFNetWorking,我將AFNetWorking從cocoapods中刪除手動(dòng)添加之后缔莲,它又會(huì)報(bào)其它庫(kù)的錯(cuò)誤哥纫,一般這種問(wèn)題就是因?yàn)槁窂降膯?wèn)題,這里奉上解決方法:library search path 設(shè)置:$(inherited)
iOS7報(bào)錯(cuò)信息:Library not loaded: /System/Library/Frameworks/Photos.framework/Photos
Referenced from: /var/mobile/Applications/E19A46C1-C0EC-4DC3-A9CE-DC84811DD7E8/xxxx.app
Reason: image not found
解決方案:You need to weak link Photos.framework, not ALAssetsLibrary! Xcode -> Targets -> YourTargetName -> Build Phases -> Link Binary With Libraries -> Set Photos.framework to Optional.圖片裁剪:可以實(shí)現(xiàn)美食杰啟動(dòng)頁(yè)圖片上下分開(kāi)動(dòng)畫(huà)效果
CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height *0.5, image.size.width, image.size.height *0.5))
播放GIF比較好的庫(kù):FlipBoard出品的FLAnimatedImage
time profilter部分專詞意思
Separate by Thread:按線程分開(kāi)做分析痴奏,這樣更容易揪出那些吃資源的問(wèn)題線程蛀骇。特別是對(duì)于主線程,它要處理和渲染所有的接口數(shù)據(jù)读拆,一旦受到阻塞擅憔,程序必然卡頓或停止響應(yīng)。
Invert Call Tree:反向輸出調(diào)用樹(shù)檐晕。把調(diào)用層級(jí)最深的方法顯示在最上面暑诸,更容易找到最耗時(shí)的操作蚌讼。
Hide Missing Symbols:隱藏缺失符號(hào)。如果 dSYM 文件或其他系統(tǒng)架構(gòu)缺失个榕,列表中會(huì)出現(xiàn)很多奇怪的十六進(jìn)制的數(shù)值篡石,用此選項(xiàng)把這些干擾元素屏蔽掉,讓列表回歸清爽西采。
Hide System Libraries:隱藏系統(tǒng)庫(kù)文件凰萨。過(guò)濾掉各種系統(tǒng)調(diào)用,只顯示自己的代碼調(diào)用械馆。
Flattern Recursion:拼合遞歸沟蔑。將同一遞歸函數(shù)產(chǎn)生的多條堆棧(因?yàn)檫f歸函數(shù)會(huì)調(diào)用自己)合并為一條。
Top Functions:找到最耗時(shí)的函數(shù)或方法狱杰。-
NSSortDescriptor
通過(guò)它可以實(shí)現(xiàn)數(shù)組內(nèi)模型根據(jù)某一個(gè)字段或者多個(gè)進(jìn)行排序瘦材,示例代碼如下:
//按年齡和名字排序,如果碰到年齡相等的,則根據(jù)名字排序
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_age" ascending:NO];
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"_name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, sortDescriptorName, nil];
[_mutArrVideo sortUsingDescriptors:sortDescriptors];
```
-
獲取數(shù)字?jǐn)?shù)組中的最大項(xiàng)和最小項(xiàng)
NSArray * arr = [NSArray arrayWithObjects:@"10",@"50",@"9", nil];
NSInteger max = [[arr valueForKeyPath:@"@max.intValue"] integerValue];
```
非主線程執(zhí)行UI操作檢測(cè)工具
PSPDFUIKitMainThreadGuard.m-
奇怪矩陣
控制臺(tái)打臃禄:<Error>: CGAffineTransformInvert: singular matrix. May 11 16:19:48 LBAssistant[4704] <Error>: CGAffineTransformInvert: singular matrix. May 11 16:19:48 LBAssistant[4704] <Error>: CGAffineTransformInvert: singular matrix.
并且相機(jī)黑屏食棕,但是拍到的照片是存在的,只是黑屏错沽,
bug猜測(cè)原因是:UIActionsheet的問(wèn)題簿晓,更換自定義的就沒(méi)事兒了,但心里還是覺(jué)得此問(wèn)題不簡(jiǎn)單千埃,另有他因憔儿,還待高人指點(diǎn)。 cell計(jì)算高度卡頓
xib布局的自定義cell第一次計(jì)算高度卡頓2s放可,其原因是:布局中l(wèi)able使用了第三方字體(黑體)谒臼,非系統(tǒng)字體-
brew update 出錯(cuò):Error: /usr/local must be writable!? 解決方案:
sudo chgrp -R admin /usr/local sudo chmod -R g+w /usr/local
-
關(guān)于寫入權(quán)限的問(wèn)題
sudo chown demoker /Library/Caches/Homebrew
demoker 是你當(dāng)前用戶名,后面的是你受權(quán)限限制的文件目錄
-
關(guān)于injectionforXcode 使用時(shí)碰到的問(wèn)題
- 真機(jī)運(yùn)行
解決方法:在main.m或者.pch中添加??代碼:#ifdef DEBUG static char _inMainFilePath[] = __FILE__; static const char *_inIPAddresses[] = {"192.168.83.47", "127.0.0.1", 0}; //??兩個(gè)聲明可加可不加 #define INJECTION_ENABLED #import "/tmp/injectionforxcode/BundleInjection.h" #endif
- Could not codesign as 'iPhone Developer':/Users/...
issue圖片中寫得很清楚了證書(shū)到底是圖中兩個(gè)證書(shū)里面的哪一個(gè)耀里,解 決方法就是修改iOSInjectionProject/x86_64/identity.txt 文件中證書(shū)為正 確的那一個(gè)即可蜈缤,這樣就可以使用這個(gè)插件了??。[參考] (https://github.com/johnno1962/injectionforxcode/issues/41) - 真機(jī)運(yùn)行
-
synx 同步iOS工程目錄
Xcode下面直接創(chuàng)建Group時(shí)在本地項(xiàng)目文件夾中并不會(huì)形成實(shí)體文 件夾冯挎,通過(guò)synx可以將Group目錄同步底哥。使用:- 安裝
sudo gem install synx
- 使用
synx your path
- 安裝
CocoaPods管理的庫(kù)要重新pod install一次,手動(dòng)添加的Framework也要重新添加房官。
-
Realm pod install 失敗
[!] /bin/bash -c
set -e
sh build.sh cocoapods-setup
core is not a symlink. Deleting...
Downloading dependency: core 1.0.1
Downloading core failed:
curl: (56) SSLRead() return error -36
```
解決方法:
```rm -rf Pods```趾徽,刪除工程目錄下的pods文件夾,然后重新 pod install翰守,安裝Realm的時(shí)候會(huì)慢一些孵奶,等了很長(zhǎng)時(shí)間...解決方 法 參考鏈接[??](https://github.com/realm/realm-cocoa/ issues/2713)
```
curl https://static.realm.io/downloads/core/realm-core-1.0.1.tar.bz2 -O
mkdir $TMPDIR/core_bin
mv realm-core-1.0.1.tar.bz2 $TMPDIR/core_bin
22. 子類是可以調(diào)用父類xib文件進(jìn)行實(shí)例化的,例如LBWebViewController
23. sublime 插件安裝方法:[鏈接](https://packagecontrol.io/installation#st3)
1.
```ctrl+ `
```,打開(kāi)console潦俺,執(zhí)行
```simple
```中的命令拒课,即可
2. 安裝完
```package control.sublime-package
```,就可以安裝其他插件了
3.
```shift+command+p
``` 找到
```install package
```命令徐勃,回車,然后輸入需要安裝的插件名稱早像,再回車就可以了
24. realm pod 報(bào)錯(cuò)'object_schema.hpp' file not found
```
1. rm -rf Pods
2. rm -rf ~/Library/Caches/CocoaPods
```
Done.