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

1      Block教程系列

發佈者:Seven's 2013/04/22 - 分類:夢印象

ios開發block的使用指南,以及深入理解block的內存管理,也適用於osx開發。

討論範圍:block的使用,內存管理,內部實現。

不包含的內容:gc arc下的block內存,blockc++中的使用。

  1. Block介紹(一)基礎
  2. Block介紹(二)內存管理與其他特性
  3. block介紹(三)揭開神祕面紗(上)
  4. block介紹(四)揭開神祕面紗(下)

2      iOS開發 git github 初學+進階

iOS開發 git github初學+進階

http://guxiaojje.blog.163.com/blog/static/140942291201272110343064/

 

3      iPhone應用程序的啓動過程

 

 

iPhone應用程序的啓動過程

http://mobile.51cto.com/iphone-284474.htm

4      使用靜態IP無法打開部分網頁的解決辦法

 

使用靜態IP無法打開部分網頁的解決辦法,手動設置DNS,並且備用DNS設置爲114.114.114.114

 

5      js枚舉類型

js枚舉類型定義:

方法 1:

var DataType = {String1:value1,String2:value2 }

 

      方法 2:

var DataType = { } ;

DataType.String1=value1;

DataType.String2=value2;

遍歷枚舉類型:

for(var i in DataType ){

DataType[i]; //獲取value

i;//下標

 }

 

6      當前無線網絡不能勾選“自動發現代理”,不然無法Safari無法聯網

 

 

7      xcode編譯時報錯Permission denied

錯誤信息;

/Users/huangjun/Library/Developer/Xcode/DerivedData/HJCommonSDK-agizpwqgszletfcizlxijeokyaaq/Build/Intermediates/iPhone.build/Debug-iphonesimulator/iPhone.build/Script-B52D492810DA4041008E8365.sh:line 2: ./Build Scripts/set_version_number.rb: Permission denied

 

 

8       【CoreData】新建記錄

ios中的coredata的使用

http://blog.csdn.net/chen505358119/article/details/9334831

 

1.  //插入數據  

2.  - (IBAction)addIntoDataSource:(id)sender {  

3.      User* user=(User *)[NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.myAppDelegate.managedObjectContext];  

4.      [user setName:_nameText.text];  

5.      [user setAge:[NSNumber numberWithInteger:[_ageText.text integerValue]]];  

6.      [user setSex:_sexText.text];  

7.      NSError* error;  

8.      BOOL isSaveSuccess=[_myAppDelegate.managedObjectContext save:&error];  

9.      if (!isSaveSuccess) {  

10.         NSLog(@"Error:%@",error);  

11.     }else{  

12.         NSLog(@"Save successful!");  

13.     }  

14.       

15. }  

9       【CoreData】查詢記錄

1.  //查詢  

2.  - (IBAction)query:(id)sender {  

3.      NSFetchRequest* request=[[NSFetchRequest alloc] init];  

4.      NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  

5.      [request setEntity:user];  

6.  //    NSSortDescriptor* sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];  

7.  //    NSArray* sortDescriptions=[[NSArray alloc] initWithObjects:sortDescriptor, nil];  

8.  //    [request setSortDescriptors:sortDescriptions];  

9.  //    [sortDescriptions release];  

10. //    [sortDescriptor release];  

11.     NSError* error=nil;  

12.     NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  

13.     if (mutableFetchResult==nil) {  

14.         NSLog(@"Error:%@",error);  

15.     }  

16.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  

17.     for (User* user in mutableFetchResult) {  

18.         NSLog(@"name:%@----age:%@------sex:%@",user.name,user.age,user.sex);  

19.     }  

20.     [mutableFetchResult release];  

21.     [request release];  

22. }  

10    【CoreData】更新記錄

1.  //更新  

2.  - (IBAction)update:(id)sender {  

3.      NSFetchRequest* request=[[NSFetchRequest alloc] init];  

4.      NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  

5.      [request setEntity:user];  

6.      //查詢條件  

7.      NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];  

8.      [request setPredicate:predicate];  

9.      NSError* error=nil;  

10.     NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  

11.     if (mutableFetchResult==nil) {  

12.         NSLog(@"Error:%@",error);  

13.     }  

14.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  

15.     //更新age後要進行保存,否則沒更新  

16.     for (User* user in mutableFetchResult) {  

17.         [user setAge:[NSNumber numberWithInt:12]];  

18.           

19.     }  

20.     [_myAppDelegate.managedObjectContext save:&error];  

21.     [mutableFetchResult release];  

22.     [request release];  

23.       

24. }  

11    【CoreData】刪除記錄

1.  //刪除  

2.  - (IBAction)del:(id)sender {  

3.      NSFetchRequest* request=[[NSFetchRequest alloc] init];  

4.      NSEntityDescription* user=[NSEntityDescription entityForName:@"User" inManagedObjectContext:_myAppDelegate.managedObjectContext];  

5.      [request setEntity:user];  

6.      NSPredicate* predicate=[NSPredicate predicateWithFormat:@"name==%@",@"chen"];  

7.      [request setPredicate:predicate];  

8.      NSError* error=nil;  

9.      NSMutableArray* mutableFetchResult=[[_myAppDelegate.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];  

10.     if (mutableFetchResult==nil) {  

11.         NSLog(@"Error:%@",error);  

12.     }  

13.     NSLog(@"The count of entry: %i",[mutableFetchResult count]);  

14.     for (User* user in mutableFetchResult) {  

15.         [_myAppDelegate.managedObjectContext deleteObject:user];  

16.     }  

17.       

18.     if ([_myAppDelegate.managedObjectContext save:&error]) {  

19.         NSLog(@"Error:%@,%@",error,[error userInfo]);  

20.     }  

21. }  

 

 

12    【CoreData】多條件查詢

predicate = [NSPredicatepredicateWithFormat:@"(salesMan = %@) AND (customerName contains %@) AND(customerSex = %@) AND (createdDate >= %d) AND (createdDate <=%d)",[[NSUserDefaults standardUserDefaults]objectForKey:kDefaultUsernameKey], custName,custSex, fromTime, toTime];

 

13    【CoreData】處理海量數據

BatchUpdates可用於批量快速更新數據Asynchronous Fetching可用於異步抓取海量數據並可以通過 NSProgress 實現進度跟蹤和取消

13.1  Batch Updates

CoreData中想要更新大量數據,我們往往要將大量修改後的NSManagedObject 加載到 NSManagedObjectContext 中並保存,這會佔用大量內存,試想想在iPhone這樣的內存有限的移動設備上將是個災難,數據有可能丟失。你可能會採取批處理的方式,即一小批一小批的更新 NSManagedObject 並保存到 NSManagedObjectContext 中,但這樣會花費很多時間,用戶體驗較差。

爲了解決這個問題,蘋果在 NSManagedObjectContext 加入了一個新的方法:executeRequest:error: ,它接受一個 NSPersistentStoreRequest 類型的參數,返回類型爲 NSPersistentStoreResult 

關於 NSPersistentStoreRequest 有些人可能比較熟悉,它是NSFetchRequest  NSSaveChangesRequest  NSBatchUpdateRequest NSAsynchronousFetchRequest 的基類。後兩個類是這次iOS8新加的,也是這篇文章將要討論的內容。

NSPersistentStoreResult 是一個新加入的類,它也是一個基類,而且是抽象類,這個類作爲 executeRequest:error: 返回內容的父類,相當於一個接口,它目前有兩個子類: NSPersistentStoreAsynchronousResult NSBatchUpdateResult 

你大概猜到了, NSBatchUpdateResult 對應着前面的NSBatchUpdateRequest ,下面說說 NSBatchUpdateRequest 。它有點像NSFetchRequest :它允許你指定一個想要更新數據的實體;也可以指定一個affectedStores ,它存儲了一個接受更新請求的 NSPersistentStore 數組。(其實它是 NSPersistentStoreRequest 的屬性);它也有一個謂詞屬性來做更新的條件,它跟 NSFetchRequest 中的謂詞一樣強大和靈活,類似於SQLwhere語句;它允許你指定想要更新的字段,通過 propertiesToUpdate 屬性來描述字段更新,它是一個字段,key NSPropertyDescription 或屬性名字符串,value NSExpression 或常量。

接着談談 NSBatchUpdateResult ,它有一個 result 屬性和 resultType屬性, result 中的內容跟 resultType 有關,可能是成功或者失敗,有可能是每行被更新的ID,也可能是被更新的行數。

需要注意的是,由於 NSBatchUpdateRequest 並不會先將數據存入內存,而是直接操作數據庫,所以並不會引起NSManagedObjectContext的同步更新,所以你不僅需要獲取 NSBatchUpdateResult 然後刷新 NSManagedObjectContext 對應的數據和UI界面,還需要保證更新後的數據滿足數據庫模型上的 validation ,因爲 NSManagedObjectContext 沒有感知Batch Updates,一些數據驗證工作就落在了程序員的身上(你需要寫一段代碼驗證更新後的數據是合法的,用戶可不希望在跑步APP上看到自己今天跑步里程是個負數)。一旦有非法數據錄入數據庫,下次加載並修改 NSManagedObject 的時候就會導致數據驗證失敗。除了上面提到的這些,還要注意Batch Updates對數據庫的操作是樂觀鎖,也就是假定很少會發生同時存取同一塊數據的情況,所以你需要制定一個合理的”merge”策略來應付因同時更新數據產生的衝突。

Batch Updates的優勢在於其效率,在處理上萬條數據的時候,它執行的時間跟SQL語句執行時間相當。

13.2  Asynchronous Fetching

Asynchronous Fetching的加入依然是爲了解決CoreData讀取海量數據所帶來的問題。通過使用Asynchronous Fetching,我們可以在抓取數據的同時不阻塞佔用NSManagedObjectContext ,並可以隨時取消抓取行爲,隨時跟蹤抓取數據的進度。

設想我們平時用 NSFetchRequest 抓取數據的時候,我們會先用NSManagedObjectContext  executeFetchRequest:error: 方法傳入一個NSFetchRequest ,然後請求會被髮送到 NSPersistentStore ,然後執行一段時間後返回一個數組,在 NSManagedObjectContext 更新後,這個數組被當做executeFetchRequest:error: 的返回值返回到我們這裏。

AsynchronousFetching則不同,當我們將一個NSAsynchronousFetchRequest 對象傳入 executeRequest:error: 方法後會立即返回一個未來的” NSAsynchronousFetchResult NSAsynchronousFetchRequest 初始化時需要傳入兩個參數賦值給屬性:

1.   completionBlock 屬性允許我們在抓取完成後執行回調block

2.   fetchRequest 屬性類型是 NSFetchRequest 也即是說雖然是異步抓取其實我們用的還是以前的 NSFetchRequest  NSFetchRequest 抓取結束後會更新 NSManagedObjectContext 這也就意味着NSManagedObjectContext 的併發類型只能是NSPrivateQueueConcurrencyType  NSMainQueueConcurrencyType

於是當我們用 NSAsynchronousFetchRequest 抓取數據時,我們會先用NSManagedObjectContext  executeRequest:error: 方法傳入一個NSAsynchronousFetchRequest ,這個方法在 NSManagedObjectContext 上執行時, NSManagedObjectContext 會立即製造並返回一個NSAsynchronousFetchResult ,同時 NSAsynchronousFetchRequest 會被髮送到 NSPersistentStore 。你現在可以繼續編輯這個NSManagedObjectContext 中的 NSManagedObject ,等到NSPersistentStore 執行請求完畢時會將結果返回給NSAsynchronousFetchResult  finalResult 屬性,更新NSManagedObjectContext ,執行 NSAsynchronousFetchRequest 的回調block

舉個栗子:

let request = NSFetchRequest(entityName: "MyEntity")         let async = NSAsynchronousFetchRequest(fetchRequest: request){             (id result) in             if result.finalResult {                 //TODO..             }         }

Swift代碼很簡潔,並用了尾隨閉包語法,看不懂的朋友也不用着急,知道NSAsynchronousFetchRequest 大概的用法就行。

之前提到過 NSAsynchronousFetchRequest 能在抓取數據的過程中跟蹤進度,於是乎 NSProgress 登場了!一行代碼頂十句話:

let request = NSFetchRequest(entityName: "MyEntity") var asyncResult:NSPersistentStoreResult! let async = NSAsynchronousFetchRequest(fetchRequest: request){             (id result) in             if result.finalResult {                 //TODO..             }         } let progress = NSProgress(totalUnitCount: 1) progress.becomeCurrentWithPendingUnitCount(1) managedObjectContext?.performBlock{             [unowned self] in             let error = NSErrorPointer()             asyncResult = self.managedObjectContext?.executeRequest(async, error: error)         } progress.resignCurrent()

而取消獲取數據只需要取消 NSProgress 就可以了!取消行爲會沿着數的根節點蔓延到葉子。

progress.cancel()

可以在 cancellationHandler 屬性設置取消後執行的block,這裏不再多說。

 

14    【NSSet】NSArray NSSet轉換

1.  NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  

2.  NSSet *set = [NSSet setWithArray:arr];  

3.  NSLog(@"set%@\n", set);  

 

15    【NSSet】NSSet的排序

1.  NSArray *arr = @[@"12-11"@"12-11"@"12-11"@"12-12"@"12-13"@"12-14"];  

2.  NSSet *set = [NSSet setWithArray:arr];  

3.  NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];  

4.  NSArray *sortSetArray = [set sortedArrayUsingDescriptors:sortDesc];  

5.  NSLog(@"set%@\nsort set%@", set, sortSetArray); 

 

16    【JS】位運算的運算符優先級問題

在Javascript中,位運算的運算符優先級比加減號低,所以一定要注意,正確的寫法是在位運算符處加上括號:

_deviceStatusData.outflowTDS.value= (body[43] << 8) + body[42];

17    【JS】Js獲取當前日期時間及其它操作

varmyDate = new Date();
myDate.getYear();        //
獲取當前年份(2)
myDate.getFullYear();    //
獲取完整的年份(4,1970-????)
myDate.getMonth();       //
獲取當前月份(0-11,0代表1)
myDate.getDate();        //
獲取當前日(1-31)
myDate.getDay();         //
獲取當前星期X(0-6,0代表星期天)
myDate.getTime();        //
獲取當前時間(1970.1.1開始的毫秒數)
myDate.getHours();       //
獲取當前小時數(0-23)
myDate.getMinutes();     //
獲取當前分鐘數(0-59)
myDate.getSeconds();     //
獲取當前秒數(0-59)
myDate.getMilliseconds();    //
獲取當前毫秒數(0-999)
myDate.toLocaleDateString();     //
獲取當前日期
var mytime=myDate.toLocaleTimeString();     //
獲取當前時間
myDate.toLocaleString( );        //
獲取日期與時間

 

日期時間腳本庫方法列表

Date.prototype.isLeapYear判斷閏年
Date.prototype.Format
日期格式化
Date.prototype.DateAdd
日期計算
Date.prototype.DateDiff
比較日期差
Date.prototype.toString
日期轉字符串
Date.prototype.toArray
日期分割爲數組
Date.prototype.DatePart
取日期的部分信息
Date.prototype.MaxDayOfDate
取日期所在月的最大天數
Date.prototype.WeekNumOfYear
判斷日期所在年的第幾周
StringToDate
字符串轉日期型
IsValidDate
驗證日期有效性
CheckDateTime
完整日期時間檢查
daysBetween
日期天數差

js代碼:

//---------------------------------------------------  
//
判斷閏年  
//---------------------------------------------------  
Date.prototype.isLeapYear = function()   
{   
    return(0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));   
}   
  
//---------------------------------------------------  
//
日期格式化  
//
格式 YYYY/yyyy/YY/yy 表示年份  
// MM/M
月份  
// W/w
星期  
// dd/DD/d/D
日期  
// hh/HH/h/H
時間  
// mm/m
分鐘  
// ss/SS/s/S
  
//---------------------------------------------------  
Date.prototype.Format = function(formatStr)   
{   
    var str = formatStr;   
    var Week = ['
','','','','','',''];  
  
    str=str.replace(/yyyy|YYYY/,this.getFullYear());   
    str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear()% 100).toString():'0' + (this.getYear() % 100));   
  
    str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0'+ this.getMonth());   
    str=str.replace(/M/g,this.getMonth());   
  
    str=str.replace(/w|W/g,Week[this.getDay()]);   
  
    str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0'+ this.getDate());   
    str=str.replace(/d|D/g,this.getDate());   
  
    str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0'+ this.getHours());   
    str=str.replace(/h|H/g,this.getHours());   
    str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0'+ this.getMinutes());   
    str=str.replace(/m/g,this.getMinutes());   
  
    str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0'+ this.getSeconds());   
    str=str.replace(/s|S/g,this.getSeconds());   
  
    return str;   
}   
  
//+---------------------------------------------------  
//|
求兩個時間的天數差日期格式爲 YYYY-MM-dd   
//+---------------------------------------------------  
function daysBetween(DateOne,DateTwo)  
{   
    var OneMonth = DateOne.substring(5,DateOne.lastIndexOf('-'));  
    var OneDay =DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);  
    var OneYear = DateOne.substring(0,DateOne.indexOf('-'));  
  
    var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf('-'));  
    var TwoDay =DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);  
    var TwoYear = DateTwo.substring(0,DateTwo.indexOf('-'));  
  
    var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)-Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);   
    return Math.abs(cha);  
}  
  
  
//+---------------------------------------------------  
//|
日期計算  
//+---------------------------------------------------  
Date.prototype.DateAdd = function(strInterval, Number) {   
    var dtTmp = this;  
    switch (strInterval) {   
        case 's' :return newDate(Date.parse(dtTmp) + (1000 * Number));  
        case 'n' :return newDate(Date.parse(dtTmp) + (60000 * Number));  
        case 'h' :return newDate(Date.parse(dtTmp) + (3600000 * Number));  
        case 'd' :return newDate(Date.parse(dtTmp) + (86400000 * Number));  
        case 'w' :return newDate(Date.parse(dtTmp) + ((86400000 * 7) * Number));  
        case 'q' :return newDate(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(),dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
        case 'm' :return newDate(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(),dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
        case 'y' :return newDate((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(),dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());  
    }  
}  
  
//+---------------------------------------------------  
//|
比較日期差 dtEnd 格式爲日期型或者有效日期格式字符串  
//+---------------------------------------------------  
Date.prototype.DateDiff = function(strInterval, dtEnd) {   
    var dtStart = this;  
    if (typeof dtEnd == 'string' )//
如果是字符串轉換爲日期型  
    {   
        dtEnd =StringToDate(dtEnd);  
    }  
    switch (strInterval) {   
        case 's' :returnparseInt((dtEnd - dtStart) / 1000);  
        case 'n' :returnparseInt((dtEnd - dtStart) / 60000);  
        case 'h' :returnparseInt((dtEnd - dtStart) / 3600000);  
        case 'd' :returnparseInt((dtEnd - dtStart) / 86400000);  
        case 'w' :returnparseInt((dtEnd - dtStart) / (86400000 * 7));  
        case 'm' :return(dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) -(dtStart.getMonth()+1);  
        case 'y' :returndtEnd.getFullYear() - dtStart.getFullYear();  
    }  
}  
  
//+---------------------------------------------------  
//|
日期輸出字符串,重載了系統的toString方法  
//+---------------------------------------------------  
Date.prototype.toString = function(showWeek)  
{   
    var myDate= this;  
    var str = myDate.toLocaleDateString();  
    if (showWeek)  
    {   
        var Week = ['
','','','','','',''];  
        str += '
星期' + Week[myDate.getDay()];  
    }  
    return str;  
}  
  
//+---------------------------------------------------  
//|
日期合法性驗證  
//|
格式爲:YYYY-MM-DDYYYY/MM/DD  
//+---------------------------------------------------  
function IsValidDate(DateStr)   
{   
    var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //
去兩邊空格;   
    if(sDate=='') return true;   
    //
如果格式滿足YYYY-(/)MM-(/)DDYYYY-(/)M-(/)DDYYYY-(/)M-(/)DYYYY-(/)MM-(/)D就替換爲''   
    //
數據庫中,合法日期可以是:YYYY-MM/DD(2003-3/21),數據庫會自動轉換爲YYYY-MM-DD格式   
    var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2}[\-/]{ 1 }[\d]{ 1,2 }/g,'');   
    if (s=='') //
說明格式滿足YYYY-MM-DDYYYY-M-DDYYYY-M-DYYYY-MM-D   
    {   
        var t=newDate(sDate.replace(/\-/g,'/'));   
        var ar = sDate.split(/[-/:]/);   
        if(ar[0] != t.getYear() ||ar[1] != t.getMonth()+1 || ar[2] != t.getDate())   
        {   
            //alert('
錯誤的日期格式!格式爲:YYYY-MM-DDYYYY/MM/DD。注意閏年。');   
            returnfalse;   
        }   
    }   
    else   
    {   
        //alert('
錯誤的日期格式!格式爲:YYYY-MM-DDYYYY/MM/DD。注意閏年。');   
        return false;   
    }   
    return true;   
}   
  
//+---------------------------------------------------  
//|
日期時間檢查  
//|
格式爲:YYYY-MM-DD HH:MM:SS  
//+---------------------------------------------------  
function CheckDateTime(str)  
{   
    var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2}):(\d{ 1,2 }):(\d{ 1,2 })$/;   
    var r = str.match(reg);   
    if(r==null)return false;   
    r[2]=r[2]-1;   
    var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);   
    if(d.getFullYear()!=r[1])returnfalse;   
    if(d.getMonth()!=r[2])return false;   
    if(d.getDate()!=r[3])return false;   
    if(d.getHours()!=r[4])return false;   
    if(d.getMinutes()!=r[5])return false;   
    if(d.getSeconds()!=r[6])return false;   
    return true;   
}   
  
//+---------------------------------------------------  
//|
把日期分割成數組  
//+---------------------------------------------------  
Date.prototype.toArray = function()  
{   
    var myDate = this;  
    var myArray = Array();  
    myArray[0] = myDate.getFullYear();  
    myArray[1] = myDate.getMonth();  
    myArray[2] = myDate.getDate();  
    myArray[3] = myDate.getHours();  
    myArray[4] = myDate.getMinutes();  
    myArray[5] = myDate.getSeconds();  
    return myArray;  
}  
  
//+---------------------------------------------------  
//|
取得日期數據信息  
//|
參數 interval 表示數據類型  
//| y
m d w星期 ww h n s  
//+---------------------------------------------------  
Date.prototype.DatePart = function(interval)  
{   
    var myDate = this;  
    var partStr='';  
    var Week = ['
','','','','','',''];  
    switch (interval)  
    {   
        case 'y' :partStr =myDate.getFullYear();break;  
        case 'm' :partStr =myDate.getMonth()+1;break;  
        case 'd' :partStr =myDate.getDate();break;  
        case 'w' :partStr =Week[myDate.getDay()];break;  
        case 'ww' :partStr =myDate.WeekNumOfYear();break;  
        case 'h' :partStr =myDate.getHours();break;  
        case 'n' :partStr =myDate.getMinutes();break;  
        case 's' :partStr =myDate.getSeconds();break;  
    }  
    return partStr;  
}  
  
//+---------------------------------------------------  
//|
取得當前日期所在月的最大天數  
//+---------------------------------------------------  
Date.prototype.MaxDayOfDate = function()  
{   
    var myDate = this;  
    var ary = myDate.toArray();  
    var date1 = (new Date(ary[0],ary[1]+1,1));  
    var date2 = date1.dateAdd(1,'m',1);  
    var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));  
    return result;  
}  
  
//+---------------------------------------------------  
//|
取得當前日期所在周是一年中的第幾周  
//+---------------------------------------------------  
Date.prototype.WeekNumOfYear = function()  
{   
    var myDate = this;  
    var ary = myDate.toArray();  
    var year = ary[0];  
    var month = ary[1]+1;  
    var day = ary[2];  
    document.write('< script language=VBScript\>\n');  
    document.write('myDate =Datue(''+month+'-'+day+'-'+year+'') \n');  
    document.write('result = DatePart('ww', myDate)\n');  
    document.write(' \n');  
    return result;  
}  
  
//+---------------------------------------------------  
//|
字符串轉成日期類型   
//|
格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/ddYYYY-MM-dd  
//+---------------------------------------------------  
function StringToDate(DateStr)  
{   
  
    var converted = Date.parse(DateStr);  
    var myDate = new Date(converted);  
    if (isNaN(myDate))  
    {   
        //var delimCahar =DateStr.indexOf('/')!=-1?'/':'-';  
        var arys=DateStr.split('-');  
        myDate = newDate(arys[0],--arys[1],arys[2]);  
    }  
    return myDate;  
}  

 

若要顯示:當前日期加時間(:2009-06-1212:00)

function CurentTime()
    { 
        var now = new Date();
       
        var year =now.getFullYear();       //

        var month = now.getMonth() +1;     //

        var day =now.getDate();            //

       
        var hh =now.getHours();            //

        var mm =now.getMinutes();          //

       
        var clock = year +"-";
       
        if(month < 10)
            clock+= "0";
       
        clock += month + "-";
       
        if(day < 10)
            clock+= "0";
           
        clock += day + " ";
       
        if(hh < 10)
            clock +="0";
           
        clock += hh + ":";
        if (mm < 10) clock +='0'; 
        clock += mm; 
        return(clock); 
    }
 

 

 

 

 

18    【File】iOS的四種方法讀取文件內容

//第一種方法: NSFileManager實例方法讀取數據

        NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory,NSUserDomainMask, YES);

        NSString*thepath = [paths lastObject];

        thepath= [thepath stringByAppendingPathComponent:@"fd_list.txt"];

        NSLog(@"桌面目錄:%@", thepath);

        NSFileManager*fm = [NSFileManager defaultManager];

        NSData*data = [[NSData alloc] init];

        data= [fm contentsAtPath:thepath];

        NSLog(@"%@",[[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]);

         

         

        //第二種方法: NSData類方法讀取數據

        data= [NSData dataWithContentsOfFile:thepath];

        NSLog(@"NSData類方法讀取的內容是:%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);

         

         

        //第三種方法: NSString類方法讀取內容

        NSString*content = [NSString stringWithContentsOfFile:thepathencoding:NSUTF8StringEncoding error:nil];

        NSLog(@"NSString類方法讀取的內容是:\n%@",content);

         

         

        //第四種方法: NSFileHandle實例方法讀取內容

        NSFileHandle*fh = [NSFileHandle fileHandleForReadingAtPath:thepath];

        data= [fh readDataToEndOfFile];

        NSLog(@"NSFileHandle實例讀取的內容是:\n%@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);

 

http://www.2cto.com/kf/201404/290149.html

 

19    【編譯】Cannot define category forundefined class ‘NSString’

這個問題是由於默認沒有引用Foundation.h導致

 

解決方案:

            在代碼中引用#import <Foundation/Foundation.h>

 

20    【View】-[UITableViewController loadView] loaded the"XXX" nib but didn't get a UITableView.

'-[UITableViewController loadView] loaded the"XXX" nib but didn't get a UITableView.'

 

解決方法:在頭文件中,將所繼承的父類UITableViewController 改成 UIViewController。

 

uncaught exception 'NSInternalInconsistencyException,reason:[UITableViewController loadView] loaded the "Controller" nibbut didn't get a UITableView

http://www.tuicool.com/articles/67VN3m

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章