開發過程中難免會遇到這樣那樣的問題,接下來我將自己開發中遇到的一些問題列舉一些,一來是希望自己記得 不再犯類似的錯誤,二來是希望能夠幫助遇到這些問題的同學。如果寫的有錯誤的地方,希望大家批評指正。PS:以下的遇到的這些問題在我的印象筆記中都可以找到。需要印象筆記共享的同學可以聯絡我。
郵箱:
shavekevin@gmail.com 。
複製程式碼
1.取消cell的分割線
tableview.separatorStyle = UITableViewCellSeparatorStyleNone;
複製程式碼
2.UITabelviewCell 的高亮狀態的取消 用以下方法:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
//設定cell的背景是透明的。
cell.backgroundColor = [UIColor clearColor];
//取消cell的高亮狀態
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
//使用下面的這個方法會導致cell不能響應點選事件
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
複製程式碼
3.設定分割線的左右偏移量
tableview setSeparatorInset:inset
複製程式碼
4.類的宣告和實現,書寫的時候。容易犯的錯誤有一下幾種情況。
(1).只寫宣告,不寫實現。
(2).將@end這個結束標記忘記了。
(3).類的宣告或者實現都不能寫下C語言的函式中。
(4).屬性的宣告必須寫在大括號中。
(5).在宣告屬性的時候,不能夠直接賦值。
(6).宣告和實現不能夠巢狀使用。
5.更換頭像後,好友不會立馬看到我們更換的新頭像。請問使用來哪種機制來更新本地的快取。
IM透傳 發個訊息過去 攜帶新頭像 好友接到後更新。
6.推送如何跳轉到對應的controller
跳轉介面
- (void)push:(NSDictionary *)params
{
// 類名
NSString *class =[NSString stringWithFormat:@"%@", params[@"class"]];
const char *className = [class cStringUsingEncoding:NSASCIIStringEncoding];
// 從一個字串返回一個類
Class newClass = objc_getClass(className);
if (!newClass)
{
// 建立一個類
Class superClass = [NSObject class];
newClass = objc_allocateClassPair(superClass, className, 0);
// 註冊你建立的這個類
objc_registerClassPair(newClass);
}
// 建立物件
id instance = [[newClass alloc] init];
// 對該物件賦值屬性
NSDictionary * propertys = params[@"property"];
[propertys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// 檢測這個物件是否存在該屬性
if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key]) {
// 利用kvc賦值
[instance setValue:obj forKey:key];
}
}];
// 獲取導航控制器
UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController;
UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex];
// 跳轉到對應的控制器
[pushClassStance pushViewController:instance animated:YES];
}
複製程式碼
檢測物件是否存在該屬性
- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName
{
unsigned int outCount, i;
// 獲取物件裡的屬性列表
objc_property_t * properties = class_copyPropertyList([instance
class], &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property =properties[i];
// 屬性名轉成字串
NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
// 判斷該屬性是否存在
if ([propertyName isEqualToString:verifyPropertyName]) {
free(properties);
return YES;
}
}
free(properties);
return NO;
}
複製程式碼
來源於簡書: iOS 萬能跳轉介面方法 runtime實用篇一
7.3D效果 還不錯哦
https://github.com/nicklockwood/iCarousel
8.xcode7引入xmpp提示module libxmlsimu not found怎麼解決?
解決方案如下圖:
9.data進行MD5 加密
https://github.com/shaojiankui/iOS-Categories/blob/master/Categories/Foundation/NSData/NSData%2BHash.m
10.UIVisualEffectView 背景是虛化的(類似我們iphone檢視通知時的虛化背景)
https://github.com/nicklockwood/FXBlurView
11.NSDate 的坑
Also when using a date format string using the correct format is important.
@"YYYY" is week-based calendar year.
@"yyyy" is ordinary calendar year.
可以看下面這篇部落格:NSDateFormatter 'YYYY' 和 'yyyy' 的區別
12.swift 實時濾鏡
http://blog.csdn.net/zhangao0086/article/details/39433519
13.動態載入視訊
http://www.jianshu.com/p/3dcebf0493d1
14.swift 閉包
http://www.henishuo.com/closures-of-swift/
15.理解contentsScale
http://joeshang.github.io/2015/01/10/understand-contentsscale/#disqus_thread
16.圖文混排
https://github.com/12207480/TYAttributedLabel
17.取消所有請求
[NSObject cancelPreviousPerformRequestsWithTarget:selfselector:@selector(sendContentReqData)object:nil];
複製程式碼
18.重新整理tableView某一行
[m_tableView reloadRowsAtIndexPaths:[NSArrayarrayWithObject:[NSIndexPathindexPathForRow:m_selectRowinSection:0]]withRowAnimation:UITableViewRowAnimationRight];
複製程式碼
19.textField 文字上下居中
textField.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;
//.全部刪除按鈕
textField.clearButtonMode =UITextFieldViewModeWhileEditing;
[textFieldsetAutocapitalizationType:UITextAutocapitalizationTypeNone];
複製程式碼
20.模擬導航條顏色
UINavigationBar *tmpNavBar=[[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, screenRect.size.width, 44)];
tmpNavBar.barStyle=UIBarStyleDefault;
self.m_navigationBar=tmpNavBar;
UINavigationItem *tmpNavItem=[[UINavigationItemalloc]initWithTitle:@"Search"];
UIBarButtonItem *tmpBarItem=[[UIBarButtonItem alloc]initWithTitle:@"Done"style:UIBarButtonItemStyleDone target:selfaction:@selector(exitSearchScreen)];
[tmpNavItem setRightBarButtonItem:tmpBarItem];
[m_navigationBar setItems:[NSArray arrayWithObject:tmpNavItem]];
[self addSubview:m_navigationBar];
複製程式碼
21.陣列、字典內容不能為空,裝的是地址,為空就是野指標
22.陣列,字典訪問不能越界
23.代理最好在dealloc裡設定為nil,單利必須設定,因為一個類釋放了,但是單利指標還指向這個類,可能會出問題。
24.防止野指標,代理處崩潰多為此現象。
25.字串判斷不為空,一般 str!= nil && ![str isEqualTo@""] , 不等於nil是有地址,後者是內容不為空。
26.下面的view或self.view如果小於上面的,上面的view超過下面的部分將無法與使用者互動。
27.自定義cell時,最好在cell.contentView上加控制元件
28.儘量使用點語法,減少記憶體洩漏
29.正則
(?<=src\s*\=\s*\")[\d\D]+?(?=\")
複製程式碼
取出html 中的src 圖片
30.不能重複釋放
31.兩個物件不能相互引用
32.dealloc的super dealloc必須放在最後面
33.所有不帶星號的和id型別的都只能assign
34.系統執行緒也有副執行緒
35.一些變數最好都初始化,且寫在一個方法裡,需要恢復開始的狀態時可以直接呼叫該方法恢復
36.初始化的指標都要賦值為nil,系統不會幫你這麼做的
37.block 物件語法
(1).在內聯Block Objects可以直接讀取物件self,獨立的BlockObjects若想讀取self物件必須將其設定為引數傳遞進去。
(2).在內聯Block Objects可以直接用點語法讀取物件self的屬性,也可以使用setter和 getter方法,但是,獨立的Block Objects只能用setter and getter方法讀取物件self的屬性
38.改變導航條顏色
[nav.navigationBar setTintColor:[UIColorgrayColor]];
nav.navigationBar.barStyle =UIBarStyleBlackTranslucent;
複製程式碼
39.程式崩潰處理方法
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
}
複製程式碼
呼叫下面的方法,如陣列越界,呼叫不存在的方法等會打出詳細的資訊。
void UncaughtExceptionHandler(NSException*exception) {
NSArray *arr = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
NSLog(@"\nname: %@\reason: %@\nuserInfo: %@\ncallStackSymbols:%@\ncallStackReturnAddresses: %@",name,reason,[exceptionuserInfo],arr,[exceptioncallStackReturnAddresses]);
}
複製程式碼
開啟殭屍模式 Object-C的Enable Zombie Objects勾選,Memory 中的MallocStack勾選,Exceptions裡的Log Exceptions勾選
40.NSLog 怎麼列印出變數型別的?
NSStringFromSelector(SEL aSelector);
NSSelectorFromString(NSString *aSelectorName);
NSStringFromClass(Class aClass);
NSClassFromString(NSString *aClassName);
NSStringFromProtocol(Protocol *proto)
NSProtocolFromString(NSString *namestr)
NSStringFromCGPoint(CGPoint point);
NSStringFromCGVector(CGVector vector);
NSStringFromCGSize(CGSize size);
NSStringFromCGRect(CGRect rect);
NSStringFromCGAffineTransform(CGAffineTransform transform);
NSStringFromUIEdgeInsets(UIEdgeInsets insets);
NSStringFromUIOffset(UIOffset offset);
CGPointFromString(NSString *string);
CGVectorFromString(NSString *string);
CGSizeFromString(NSString *string);
CGRectFromString(NSString *string);
CGAffineTransformFromString(NSString *string);
UIEdgeInsetsFromString(NSString *string);
UIOffsetFromString(NSString *string);
複製程式碼
個人部落格 http://shavekevin.com/#blog
QQ交流群:214541576 歡迎大家進群交流。