IOS開發問題索引(五)

全系列文章索引:

IOS開發問題索引(一)

IOS開發問題索引(二)

IOS開發問題索引(三)

IOS開發問題索引(四)

IOS開發問題索引(五)

IOS開發問題索引(六)

IOS開發問題索引(七)

IOS開發問題索引(八)

IOS開發問題索引(九)


1 【CoreData】新建記錄

ios中的coredata的使用

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

//插入數據??

-?(IBAction)addIntoDataSource:(id)sender?{??

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

? ? [user?setName:_nameText.text];??

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

? ? [user?setSex:_sexText.text];??

? ? NSError*?error;??

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

? ? if?(!isSaveSuccess)?{??

? ? ? ? NSLog(@"Error:%@",error);??

? ? }else{??

? ? ? ? NSLog(@"Save?successful!");??

? ? }??

}??

2 【CoreData】查詢記錄

//查詢??

-?(IBAction)query:(id)sender?{??

? ? NSFetchRequest*?request=[[NSFetchRequest?alloc]?init];??

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

? ? [request?setEntity:user];??

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

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

//????[request?setSortDescriptors:sortDescriptions];??

//????[sortDescriptions?release];??

//????[sortDescriptor?release];??

? ? NSError*?error=nil;??

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

? ? if?(mutableFetchResult==nil)?{??

? ? ? ? NSLog(@"Error:%@",error);??

? ? }??

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

? ? for?(User*?user?in?mutableFetchResult)?{??

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

? ? }??

? ? [mutableFetchResult?release];??

? ? [request?release];??

}??

3 【CoreData】更新記錄

//更新??

-?(IBAction)update:(id)sender?{??

? ? NSFetchRequest*?request=[[NSFetchRequest?alloc]?init];??

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

? ? [request?setEntity:user];??

? ? //查詢條件??

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

? ? [request?setPredicate:predicate];??

? ? NSError*?error=nil;??

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

? ? if?(mutableFetchResult==nil)?{??

? ? ? ?NSLog(@"Error:%@",error);??

? ? }??

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

? ? //更新age后要進行保存,否則沒更新??

? ? for?(User*?user?in?mutableFetchResult)?{??

? ? ? ? [user?setAge:[NSNumber?numberWithInt:12]];? ? ? ? ? ?

? ? }??

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

? ? [mutableFetchResult?release];??

? ? [request?release];? ? ? ?

}??

4 【CoreData】刪除記錄

//刪除??

-?(IBAction)del:(id)sender?{??

? ? NSFetchRequest*?request=[[NSFetchRequest?alloc]?init];??

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

? ? [request?setEntity:user];??

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

? ? [request?setPredicate:predicate];??

? ? NSError*?error=nil;??

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

? ? if?(mutableFetchResult==nil)?{??

? ? ? ? NSLog(@"Error:%@",error);??

? ? }??

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

? ? for?(User*?user?in?mutableFetchResult)?{??

? ? ? ? [_myAppDelegate.managedObjectContext?deleteObject:user];??

? ? }? ? ?

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

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

? ? }??

}??

5? 【CoreData】多條件查詢

predicate = [NSPredicate

predicateWithFormat:@"(salesMan = %@) AND (customerName contains %@) AND

(customerSex = %@) AND (createdDate >= %d) AND (createdDate <=

%d)",[[NSUserDefaults standardUserDefaults]

objectForKey:kDefaultUsernameKey], custName,custSex, fromTime, toTime];


6? 【CoreData】處理海量數據

????????Batch Updates可用于批量快速更新數據,Asynchronous Fetching可用于異步抓取海量數據,并可以通過?NSProgress?實現進度跟蹤和取消。

6.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?中的謂詞一樣強大和靈活,類似于SQL的where語句;它允許你指定想要更新的字段,通過?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語句執行時間相當。

6.2 Asynchronous Fetching

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

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

而Asynchronous Fetching則不同,當我們將一個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,這里不再多說。


7 【NSSet】NSArray NSSet轉換

NSArray?*arr?=?@[@"12-11",?@"12-11",?@"12-11",?@"12-12",?@"12-13",?@"12-14"];??

NSSet?*set?=?[NSSet?setWithArray:arr];??

NSLog(@"set%@\n",?set);??


8 【NSSet】NSSet的排序

NSArray?*arr?=?@[@"12-11",?@"12-11",?@"12-11",?@"12-12",?@"12-13",?@"12-14"];??

NSSet?*set?=?[NSSet?setWithArray:arr];??

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

NSArray?*sortSetArray?=?[set?sortedArrayUsingDescriptors:sortDesc];??

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


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

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

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

10 【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-DD或YYYY/MM/DD

//---------------------------------------------------

function IsValidDate(DateStr)

{

????var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去兩邊空格;

????if(sDate=='') return true;

????//如果格式滿足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)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-DD或YYYY-M-DD或YYYY-M-D或YYYY-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-DD或YYYY/MM/DD。注意閏年。');

????????????return false;

????????}

????}

????else

????{

????????//alert('錯誤的日期格式!格式為:YYYY-MM-DD或YYYY/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]) return false;

????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);

}


11 【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(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

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

data = [NSData dataWithContentsOfFile:thepath];

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

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

NSString*content = [NSString stringWithContentsOfFile:thepath encoding: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


12 【編譯】Cannot define category for undefined class ‘NSString’

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

解決方案:

?????? 在代碼中引用#import


13 【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


14 【Network】使用AFNetworking2.0請求數據時出現錯誤Requestfailed:unacceptablecontent-type:text/html解決方法

????????使用AFNetworking 2.0請求數據時出現錯誤 Request failed: unacceptable content-type: text/html ????????解決方法:

????????添加一行

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

http://www.haogongju.net/art/2407859


15 【JS】Js常用調試的方法

http://www.cnblogs.com/Look_Sun/archive/2010/08/06/1793643.html


16 【JS】Safari調試工具

????????在Enable - SafariPrefernces --> Advanced最下面的選項勾選, 然后你就可以在右鍵菜單上看到Inspect Element選項了 - 跟Chrome一模一樣


17 【地理位置】APP獲取本地地理位置時注意

????????APP中獲取本地地理位置時,要注意打開APP的地理位置授權,位置在設置—>隱私—>定位服務

?????? 不然獲取不到位置信息,而且沒有提示,而且APP一旦移除重新安裝,需要重新設置。

18 【mac ox】mac命令行下怎么切換到root用戶

????????可以使用sudo -i然后輸入密碼即可

19 【js】遍歷js對象并獲取某一個成員對象

for(var app in callbackData)

{

????var appObj = callbackData[app];

?????if(appObj != null && appObj.applianceId != undefined &&appObj.applianceId == curAppID)

?????{

? ? ? ? ? ?_userApplianceInfo = appObj;

? ? ? ? ? ?break;

? ? ? ?}

?}


20 Objective-C自定義NSLog宏

/*

?XCode?LLVM?XXX?-?Preprocessing中Debug會添加?DEBUG=1?標志

?*/

#ifdef?DEBUG

#define?NSLog(FORMAT,?...)?fprintf(stderr,"%s:%d\t%s\n",[[[NSString?stringWithUTF8String:__FILE__]?lastPathComponent]?UTF8String],?__LINE__,?[[NSString?stringWithFormat:FORMAT,?##__VA_ARGS__]?UTF8String]);

#else

#define?NSLog(FORMAT,?...)?nil

#endif


21 【兼容性】IOS8中,CLLocationManagerDelegate不調用didUpdateLocations

CLLocationManagerDelegate不調用didUpdateLocations

http://www.cocoachina.com/bbs/read.php?tid=259171

iOS8下的開發變化

http://www.cocoachina.com/bbs/read.php?tid=217107

????????需要在使用CoreLocation前調用方法 requestWhenInUseAuthorization()或者requestAlwaysAuthorization(),并在Info.plist中加入兩個缺省沒有的字段NSLocationAlwaysUsageDescription、NSLocationWhenInUseUsageDescription?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載自:計算兩個日期相差天數:轉載自:http://www.jb51.net/article/44927.htmf...
    天字一等閱讀 2,509評論 0 0
  • Js獲取當前日期時間及其它操作 var myDate = new Date(); myDate.getYear()...
    郝赫閱讀 1,126評論 0 3
  • [Js獲取當前日期時間及其它操作] 日期時間腳本庫方法列表 js代碼://--------------------...
    JS_swh閱讀 483評論 0 3
  • 臉上為她明媚的笑著 心里卻為她失戀了千萬次 花在風里飄香 那長長的多情,在笑我 后來只要有關青春 有關蓮池盛開的夏...
    曾昭閱讀 290評論 2 1
  • 從阿爾山回來已經很久了,忽然很想念那里的藍天白云,更想念那里連綿不絕的金色。 對它的印象,是從火車沿途五彩斑斕的山...
    青青苔閱讀 516評論 12 17