全系列文章索引:
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?