開發(fā)過程中或多或少會碰見一些問題和紀要,感覺有必要記下來,避免下次再犯,此文章后續(xù)會更新...
iOS app通過itunes共享文件
在程序的配置文件中添加Application supports iTunes file sharing
,設置為YES;這里共享的是沙河的Document目錄DZNEmptyDataSet使用心得
同mj刷新一起使用的時候,一定要先endrefresh方法,然后再去刷新tableview,因為DZNEmptyDataSet是在reload數(shù)據(jù)的時候獲取tableview的偏移和bounds,然后去設置空視圖的位置的,如果先reload,則會導致空視圖空視圖顯示出來的時候往上偏了54像素,54從哪里冒出來的呢?全局搜了一下,發(fā)現(xiàn)mj刷新正在pulling的時候正好54。個人認為開發(fā)中涉及到系統(tǒng)權(quán)限的應該統(tǒng)一放在一起,放在一個文件中。
-
CocoaLumberjack 自定義logger輸出樣式
- 首先自定義一個類似DDLogFileFormatterDefault的formatter作為格式輸出,實例化一個fomatter;
- 自定義一個ddloger,繼承于DDAbstractDatabaseLogger,重載db_log、db_save,添加post服務器方法;將第一步創(chuàng)建的formatter賦值給ddloger的formatter屬性;
- nslog打印
注意:
DDLog:基礎(chǔ)類,必須引入的。
DDASLLogger:支持將調(diào)試語句寫入到蘋果的日志中。一般正對Mac開發(fā)。可選。
DDTTYLogger:支持將調(diào)試語句寫入xCode控制臺。我們即使要用它。可選。
DDFileLogger:支持將調(diào)試語句寫入到文件系統(tǒng)。可選。
DDLog的輸出級別默認提供以下若干種:
DDLogError:定義輸出錯誤文本
DDLogWarn:定義輸出警告文本
DDLogInfo:定義輸出信息文本
DDLogDebug:定義輸出調(diào)試文本
DDLogVerbose:定義輸出詳細文本提供的日志級別為:
LOG_LEVEL_ERROR:只顯示錯誤日志。
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的時候,以上所有的level的打印日志都會進行打印,在appdelegate中添加多少個logger,就會形成幾種情況的日志,譬如:文件、數(shù)據(jù)庫、控制臺等,添加自定義的之后便會增加一種日志形式(自定義的上傳給服務器的日志)
問題:- 日志文件logger只會存入error和warning的日志嗎?
- 日志文件只有一個嗎?如果不是,什么時候就會創(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的實現(xiàn)可以依賴主類,但主類一定不依賴category,也就是移除一個category的代碼不會對主類產(chǎn)生影響
- category可以直接食用主類已有的私有成員變量,但不應該為實現(xiàn)catecory而在主類中添加成員變量,考慮通過上述的方式實現(xiàn)。
在用xib自定義tableview的頭部時候,有時會出現(xiàn)當我NSbundle實例化之后改變它的frame不管用,這個可能xcode的bug或者是緩存問題,刪掉重新搞
之前碰到一個問題就是缺少庫的問題,第一次顯示缺AFNetWorking,我將AFNetWorking從cocoapods中刪除手動添加之后,它又會報其它庫的錯誤,一般這種問題就是因為路徑的問題,這里奉上解決方法:library search path 設置:$(inherited)
iOS7報錯信息: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.圖片裁剪:可以實現(xiàn)美食杰啟動頁圖片上下分開動畫效果
CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height *0.5, image.size.width, image.size.height *0.5))
播放GIF比較好的庫:FlipBoard出品的FLAnimatedImage
time profilter部分專詞意思
Separate by Thread:按線程分開做分析,這樣更容易揪出那些吃資源的問題線程。特別是對于主線程,它要處理和渲染所有的接口數(shù)據(jù),一旦受到阻塞,程序必然卡頓或停止響應。
Invert Call Tree:反向輸出調(diào)用樹。把調(diào)用層級最深的方法顯示在最上面,更容易找到最耗時的操作。
Hide Missing Symbols:隱藏缺失符號。如果 dSYM 文件或其他系統(tǒng)架構(gòu)缺失,列表中會出現(xiàn)很多奇怪的十六進制的數(shù)值,用此選項把這些干擾元素屏蔽掉,讓列表回歸清爽。
Hide System Libraries:隱藏系統(tǒng)庫文件。過濾掉各種系統(tǒng)調(diào)用,只顯示自己的代碼調(diào)用。
Flattern Recursion:拼合遞歸。將同一遞歸函數(shù)產(chǎn)生的多條堆棧(因為遞歸函數(shù)會調(diào)用自己)合并為一條。
Top Functions:找到最耗時的函數(shù)或方法。-
NSSortDescriptor
通過它可以實現(xiàn)數(shù)組內(nèi)模型根據(jù)某一個字段或者多個進行排序,示例代碼如下:
//按年齡和名字排序,如果碰到年齡相等的,則根據(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ù)字數(shù)組中的最大項和最小項
NSArray * arr = [NSArray arrayWithObjects:@"10",@"50",@"9", nil];
NSInteger max = [[arr valueForKeyPath:@"@max.intValue"] integerValue];
```
非主線程執(zhí)行UI操作檢測工具
PSPDFUIKitMainThreadGuard.m-
奇怪矩陣
控制臺打印:<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.
并且相機黑屏,但是拍到的照片是存在的,只是黑屏,
bug猜測原因是:UIActionsheet的問題,更換自定義的就沒事兒了,但心里還是覺得此問題不簡單,另有他因,還待高人指點。 cell計算高度卡頓
xib布局的自定義cell第一次計算高度卡頓2s,其原因是:布局中l(wèi)able使用了第三方字體(黑體),非系統(tǒng)字體-
brew update 出錯:Error: /usr/local must be writable!? 解決方案:
sudo chgrp -R admin /usr/local sudo chmod -R g+w /usr/local
-
關(guān)于寫入權(quán)限的問題
sudo chown demoker /Library/Caches/Homebrew
demoker 是你當前用戶名,后面的是你受權(quán)限限制的文件目錄
-
關(guān)于injectionforXcode 使用時碰到的問題
- 真機運行
解決方法:在main.m或者.pch中添加??代碼:#ifdef DEBUG static char _inMainFilePath[] = __FILE__; static const char *_inIPAddresses[] = {"192.168.83.47", "127.0.0.1", 0}; //??兩個聲明可加可不加 #define INJECTION_ENABLED #import "/tmp/injectionforxcode/BundleInjection.h" #endif
- Could not codesign as 'iPhone Developer':/Users/...
tip_19.png
issue圖片中寫得很清楚了證書到底是圖中兩個證書里面的哪一個,解 決方法就是修改iOSInjectionProject/x86_64/identity.txt 文件中證書為正 確的那一個即可,這樣就可以使用這個插件了??。[參考] (https://github.com/johnno1962/injectionforxcode/issues/41) - 真機運行
-
synx 同步iOS工程目錄
Xcode下面直接創(chuàng)建Group時在本地項目文件夾中并不會形成實體文 件夾,通過synx可以將Group目錄同步。使用:- 安裝
sudo gem install synx
- 使用
synx your path
- 安裝
CocoaPods管理的庫要重新pod install一次,手動添加的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的時候會慢一些,等了很長時間...解決方 法 參考鏈接[??](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文件進行實例化的,例如LBWebViewController
23. sublime 插件安裝方法:[鏈接](https://packagecontrol.io/installation#st3)
1.
```ctrl+ `
```,打開console,執(zhí)行
```simple
```中的命令,即可
2. 安裝完
```package control.sublime-package
```,就可以安裝其他插件了
3.
```shift+command+p
``` 找到
```install package
```命令,回車,然后輸入需要安裝的插件名稱,再回車就可以了
24. realm pod 報錯'object_schema.hpp' file not found
```
1. rm -rf Pods
2. rm -rf ~/Library/Caches/CocoaPods
```
Done.