1. 程式人生 > >iOS開發中基礎常用細節問題處理

iOS開發中基礎常用細節問題處理

35. 九宮格 //九宮格方法1: 巢狀for 迴圈
    for (int a = 0 ; a <2; a ++) {
        for (int b = 0 ; b < 3 ; b++) {
            UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem];
           
            btn .backgroundColor = [UIColor redColor];
           
            btn .frame = CGRectMake(30 + (320-70)*a, 80 + (60 + 40) * b, 40, 40);
           
            [self .view addSubview:btn];
        }
    }
//方法2 .單個for迴圈
    //
 三行三列
   
    for (int a = 0;  a < 9 ; a ++) {
       
        float jiange = (320 - 40 *3)/4;
        int x = a%3;
        int y = a/3;
       
        UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem];
      
                btn .backgroundColor = [UIColor redColor];
       
        btn .frame =CGRectMake(jiange + (40 + jiange) *x, jiange + (40 + jiange) * y, 40, 40);

36.直接在輸出中判斷布林型別 [email protected]"男鳥":@"女鳥"37.伺服器 - 去掉out.println -- 句中的ln換行符str =[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

38.如果URL中路徑的字串拼接的時候 有中文 需要編碼 NSString *encodingString = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
]; 39.獲取沙盒檔案中某個資料夾下的所有內容 contentsOfDirectoryAtPath NSString *filePath =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
   
//返回值型別是陣列
   
 NSArray *arr =  [F_M contentsOfDirectoryAtPath:filePath error:nil];
   
   
 NSLog(@"arr===%@",arr);
40 .獲取沙盒檔案中某個檔案的屬性 NSString *filePath =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/str.plist"];
   
//返回值型別是字典  所以我們可以通過字典內的鍵值  取出我們想要的資料
 
 NSDictionary *dic = [F_M attributesOfItemAtPath:filePath error:nil];
   
 unsigned long long size= [dic fileSize];
   
   
 NSLog(@"----%llu",size);
   
  
 // NSLog(@"dic====%@",dic);41: 輸出物件的時候 設定輸出字串格式 呼叫的方法 //輸出物件的時候 會呼叫該物件的description 方法
-(
NSString *)description
{
   
 return [NSString stringWithFormat:@"IP-----%p   name----%@   age-----%d",self,self .name,self .age];

}
42: 沙盒檔案中路徑查詢的便捷方式 
1.
獲取根目錄檔案路徑 NSLog(@"-----%@",NSHomeDirectory());
2.獲取臨時檔案路徑 方法類似於獲取根目錄檔案 路徑NSString * temp = NSTemporaryDirectory();
3.
獲取資源包路徑NSString  *appPath =    [[NSBundle mainBundle]bundlePath];
4.
獲取某圖片或資料夾路徑 NSString * imageViewPath =[[NSBundle mainBundle]pathForResource:@"18" ofType:@"jpg"];
5.
 獲取某目錄下的檔案 —> 檔案路徑
 NSDictionary * dic =[[NSFileManager defaultManager]attributesOfItemAtPath:[self getPath] error:nil];
43: 物件序列化 歸檔 步驟 :

1. 建立可變的data (相當於一個空的袋子 )

NSMutableData * data= [[NSMutableData alloc]initWithCapacity:0];

2.歸檔  關鍵詞 : archiver 

NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

3.編碼 : (就是將物件類轉變為二進位制資料的過程)

 [archiver encodeObject:_arr];

//如果有多個物件的時候 通過 設定 key值來區分

[archiver encodeObject:_arr forKey:@"arr"];
 [archiver
 encodeObject:_view forKey:@"view"];


4.結束編碼的時候  必須呼叫 接收方法 (完成編碼)

[archiver finishEncoding];

5.可以將轉變為二進位制資料型別的 物件類寫入沙盒中

[data writeToFile:  [self getFilePath] atomically:YES];


反序列化 (將二進位制資料型別 轉換為物件類)

1. 在沙盒中取出data資料

NSData * data = [[NSData alloc]initWithContentsOfFile:[self getFilePath]];

2.將取出的資料交給反序列化來讀

NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];

3.解碼

NSArray * arr =  [unarchiver decodeObject];

//如果有多個物件 (如上)

NSArray * arr = [unarchiver decodeObjectForKey:@"arr"];

4.結束解碼 :

 [unarchiver finishDecoding];

補充 :  為了調取路徑方法方便  可以將獲取路徑封裝成方法 便於呼叫

-(NSString *)getFilePath
{
   
 return [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/arr.plist"];

2.
自定義物件轉碼的時候 1. 需要在.h檔案中必須實現的協議 <NSCoding>

2. .m 檔案中必須實現的兩個方法

//將people類中的屬性進行編碼//aCoder 編碼器//當用序列化器編碼物件的時候 , 該方法就會被呼叫
-(
void)encodeWithCoder:(NSCoder *)aCoder
{
   
 NSLog(@"3333333333");
   
    [aCoder
 encodeObject:_name forKey:@"name"];
   
    [aCoder
 encodeInt:_age forKey:@"age"];

}

//解碼//aDecoder 解碼器//反序列化時 將NSData 解碼成物件型別呼叫的方法

-(
id)initWithCoder:(NSCoder *)aDecoder
{
   
 //任意型別  初始化[super init] 方法 self = [super init];
   
   
 if (self) {
       
//需要 self.屬性   接收
 
 self .name = [aDecoder decodeObjectForKey:@"name"];
       
 
 self .age =     [aDecoder decodeIntForKey:@"age"];
       
       
              }

   
 return self;

}
補充 :  如果再建立一個類  繼承與自定義people類時 

實現第二個協議方法時 (返回值為id 的協議方法  ) 需要先繼承父類方法 即:
-(
id)initWithCoder:(NSCoder *)aDecoder
{
   
 self = [super initWithCoder:aDecoder];
   
   
 if (self) {
       
        [aDecoder
 decodeObjectForKey:@"huzi"];
       
       
    }
   
 return self;
}
快速轉碼  :

1.直接將物件放在沙盒中

 [
NSKeyedArchiver archiveRootObject:_arr toFile:[self getFilePath]];
2. 在反序列化中直接取出物件

NSArray * arr =    [NSKeyedUnarchiver unarchiveObjectWithFile:[self getFilePath]];
44:  NSUserDefaults儲存資料 (儲存輕量級的資料(賬號 密碼  是否登入))//1.NSUserDefaults 可以儲存的資料型別 : NSString  字典  陣列  NSNumber BOOL NSData(二進位制資料) NSDate(時間) int(integer)  Double   float    URL(網址)
//2.
強制資料及時儲存到沙盒//userDefaults 向沙盒中儲存資料 是按照一定的時間戳定時儲存資料 如果資料還沒來得及儲存 而此時程式出現問題 那麼資料就會丟失 所以 我們可以同步一下強制資料及時儲存到沙盒
    //synchronize 同步 保證資料及時的儲存到沙盒中
    [userDefaults synchronize];
45: NSUserDefaults  實戰中存取檔案
存資料:
 [[NSUserDefaults standardUserDefaults]setObject:_nameField.text forKey:@"name"];
        [[NSUserDefaults standardUserDefaults]setObject:_pswField.text forKey:@"psw"];
       
        //
同步資料
        [[NSUserDefaults standardUserDefaults]synchronize];
取資料:
NSString * nameString =  [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];

  NSString * pswString  =[[NSUserDefaults standardUserDefaults]objectForKey:@"psw"];
46:判斷某路徑下是否存在檔案 是不是資料夾    關鍵詞 :fileExistsAtPathNSString *filePath1 =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/str.plist"];
   
   
 NSString *filePath2 =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ABC"];
   
   
 BOOL isDirectory ;
   
 BOOL isExist= [F_M fileExistsAtPath:filePath2 isDirectory:&isDirectory];
   
 if (isExist==YES) {
       
 NSLog(@"存在檔案");
       
 if (isDirectory==YES) {
           
 NSLog(@"是個資料夾");
        }
else{
           
 NSLog(@"不是資料夾");
        }
       
    }
else{
       
 NSLog(@"不存在檔案");
    }
47 .網路請求中網路超時設定 request .timeoutInterval = 10;48. 單元格關鍵控制元件摘要 
1.
分割線顏色 樣式 :
tableVew .separatorColor =[UIColor redColor];
   
    tableVew .
separatorStyle =UITableViewCellSeparatorStyleNone;
2.
單元格背景View  可以設定圖片 下拉的時候顯示
tableVew .backgroundView =imageView;3.單元格表頭背景View 可以設定圖片 因為需要設定座標 可以通過封裝方法 然後在ViewDidLoad 方法中呼叫tableVew.tableHeaderView =imageView;
4.
檢視修剪cell.imageView.layer.cornerRadius = 50;
    cell.
imageView.layer.masksToBounds = YES;

5.cell
小掛件 cell .accessoryType =UITableViewCellAccessoryDetailButton;6.點選單元格時候的樣式:
cell .selectionStyle = UITableViewCellSelectionStyleNone;
7.
如果想把單元格的白色背景去掉的話 需要將tableView 和cell 上的背景顏色都設定為clearColor 
8.
點選單元格上的按鈕時候 在按鈕繫結的方法中找到點選的是哪一行上的按鈕 需要通過按鈕 找到cell  再通過cell 找到IndexPath
eg:
UITableViewCell * cell =(UITableViewCell *)btn.superview.superview;
NSIndexPath * indexPath =[_tableView indexPathForCell:cell];

9.
區頭區尾相關內容
//也需要重用
區頭和區尾的設定中 相關的控制元件設定和新增需要放在 view .contentView 
e.g:
1.view .
contentView .backgroundColor = [UIColor grayColor];
2.[view.
contentView addSubview:img];

10.

相關推薦

iOS開發基礎常用細節問題處理

35. 九宮格 //九宮格方法1: 巢狀for 迴圈     for (int a = 0 ; a <2; a ++) {         for (int b = 0 ; b < 3 ; b++) {             UIButton * btn = [UIButton but

iOS開發一些常用的方法

1.壓縮圖片#pragma mark 處理圖片 - (void)useImage:(UIImage *)image { NSLog(@"with-----%f heught-----%f",image.size.width,image.size.height);

iOS 開發null 與的處理

原文連結:http://www.jianshu.com/p/a73aab1c1422 針對(null)這種情況,將一個字串賦值為nil,列印輸出結果就是(null)那麼湧入下來做判斷if(result==nil) {      NSLog(@"執行"); } 針對<null>的情況 f([r

iOS開發常用的宏

tar lin iter standard ffi ant height same alt OC對象判斷是否為空? 字符串是否為空 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] ||

iOS開發多線程基礎

推斷 傳遞 cti self reads priority cal default value 耗時操作演練 代碼演練 編寫耗時方法 - (void)longOperation { for (int i = 0; i <

ios開發資料庫讀取資料牽涉到的日期處理:前一天、今天、後天、一週等

對時間處理,在開發時,時常碰到。一般有獲取具體的年月日和星期,兩個不同時間的差,某一天的前一天或後一天等;在這裡我只介紹獲取具體的年月日和星期,及某一天的前一天或後一天的方法;       對時間的處理一般都會用到NSDate類和NSCalendar類兩個類;      

關於iOS開發圖片處理的一些積累(CoreGraphic、CoreImage、GPUImage、OpenGL)

Core Image 前言 貌似公司最近的專案都是和圖片處理有關,拍拍專案中需要將圖片處理成buffer傳到影象匹配拼接演算法中,需要從原圖中摳出一定範圍的影象再貼到新的背景圖中,需要對靜態圖片進行濾鏡操作等等,所以對這方面接觸的相對多一些。

iOS開發(null)與的處理

補充一個知識 NULL nil Nil NSNull的去唄 標識 值 含義 NULL (void *)0 C指標的字面零值 nil

iOS的三大定時器 iOS開發定時器經常會用到,iOS常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。

iOS開發中定時器經常會用到,iOS中常用的定時器有三種,分別是NSTime,CADisplayLink和GCD。 NSTimer 方式1 // 建立定時器 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:

iOS開發對JSON解析資料的處理

在網上看到一個例子,對JSON解析出來的資料處理的方法非常簡單,而且通用,把我對它理解的思路寫一下。 首先介紹下JSON解析,JSON解析出來的資料只有陣列和物件兩種結構。 objective - c中用字典來儲存物件資訊。key值對應物件名字,value值對應物件的值。在

ios 開發的日期和時間處理(轉)

NSDate儲存的是世界標準時(UTC),輸出時需要根據時區轉換為本地時間 Dates         NSDate類提供了建立date,比較date以及計算兩個date之間間隔的功能。Date物件是不可改變的。         如果你要建立date物件並表示當前日期,你可以alloc一個NSDate物件並

iOS開發常用的三方庫

1.網路請求庫 AFNetworking2.圖片快取器 SDWebImage3.下拉重新整理上拉載入 MJRefresh4.JSON與Object互轉 JSONModel5.載入進度框 MBProgressHUD6.Toast提示資訊 SVProgressHUD7.鍵盤管理 IQKeyboardManager

iOS開發瀏覽器能開啟的URL,WebView打不開的處理方法

由於內容簡單,載入不出來是編碼不一致的問題,下面是解決方法:         NSString *encodedString = [url stringByAddingPercentEscapesU

ios開發常用的擷取指定區域的檢視轉換成圖片

-(void)fullScreenshots{ UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow]; UIGraphicsBeginImageContext(screen

iOS開發,對請求資料出現的一些簡單處理

這裡呢是整理的一位老鳥的東西,好東西得分享 大致實現思路就是迴圈便利做比較,如果發現是NSNull型別的就把值改為空字串;這樣的好處就是當資料請求回來,刪除一下資料裡面為<null>型別的東西,避免在直接取的時候產生程式崩潰問題; 兩個方法,一個返回NSA

iOS開發遇到的常用的小知識

1、launchImage如果不設定,或是圖片尺寸設定不正確,app啟動時會出現短暫的黑屏 2、啟動動畫簡單示例,在app delegate中寫 //圖片擴大淡出的效果開始; //設定一個圖片; niceView = [[UIImageViewalloc] in

ios開發常用的幾種輔助方法

//1.Keychain本地長期鍵值儲存 //刪除 +(void)deleteStringForKey:(NSString *)aKey { NSMutableDictionary *query = [NSMutableDictionary dictionary];

iOS開發SQLite簡單使用(基礎用法:建立表,增、刪、改、查)

SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產

iOS開發的ARC記憶體管理機制(1)——基礎概念

由於移動裝置的記憶體資源一般比較少,所以垃圾回收機制的操作會對裝置的效能造成比較明顯的影響,有可能在執行垃圾回收的時候讓移動裝置出現卡頓,這對於使用者來說是很難受的事。 由此蘋果公司提出了ARC方案。 0x01 自動引用計數 自動引用計數(Automatic Ref

iOS開發地圖與定位

視圖 編寫 aps 簡單 -a 第三方 span spa margin   不管是QQ還是微信的移動client都少不了定位功能,之前在微信demo中沒有加入定位功能,今天就寫個定位的小demo來了解一下定位和地圖的東西。地圖和定位看上去是挺高大上一東西。其有使用方法比