IOS開(kāi)發(fā)問(wèn)題索引(五)

全系列文章索引:

IOS開(kāi)發(fā)問(wèn)題索引(一)

IOS開(kāi)發(fā)問(wèn)題索引(二)

IOS開(kāi)發(fā)問(wèn)題索引(三)

IOS開(kāi)發(fā)問(wèn)題索引(四)

IOS開(kāi)發(fā)問(wèn)題索引(五)

IOS開(kāi)發(fā)問(wèn)題索引(六)

IOS開(kāi)發(fā)問(wèn)題索引(七)

IOS開(kāi)發(fā)問(wèn)題索引(八)

IOS開(kāi)發(fā)問(wèn)題索引(九)


1 【CoreData】新建記錄

ios中的coredata的使用

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

//插入數(shù)據(jù)??

-?(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后要進(jìn)行保存,否則沒(méi)更新??

? ? 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】處理海量數(shù)據(jù)

????????Batch Updates可用于批量快速更新數(shù)據(jù)砚哆,Asynchronous Fetching可用于異步抓取海量數(shù)據(jù),并可以通過(guò)?NSProgress?實(shí)現(xiàn)進(jìn)度跟蹤和取消。

6.1 Batch Updates

????????在CoreData中想要更新大量數(shù)據(jù)岁钓,我們往往要將大量修改后的NSManagedObject?加載到?NSManagedObjectContext?中并保存蛤迎,這會(huì)占用大量?jī)?nèi)存键痛,試想想在iPhone這樣的內(nèi)存有限的移動(dòng)設(shè)備上將是個(gè)災(zāi)難,數(shù)據(jù)有可能丟失对途。你可能會(huì)采取批處理的方式,即一小批一小批的更新?NSManagedObject?并保存到?NSManagedObjectContext?中髓棋,但這樣會(huì)花費(fèi)很多時(shí)間实檀,用戶體驗(yàn)較差。

????????為了解決這個(gè)問(wèn)題按声,蘋(píng)果在?NSManagedObjectContext?加入了一個(gè)新的方法:executeRequest:error:?膳犹,它接受一個(gè)?NSPersistentStoreRequest?類(lèi)型的參數(shù),返回類(lèi)型為?NSPersistentStoreResult?签则。

????????關(guān)于?NSPersistentStoreRequest?有些人可能比較熟悉须床,它是NSFetchRequest?、?NSSaveChangesRequest?渐裂、?NSBatchUpdateRequest和?NSAsynchronousFetchRequest?的基類(lèi)豺旬。后兩個(gè)類(lèi)是這次iOS8新加的,也是這篇文章將要討論的內(nèi)容芯义。

????????NSPersistentStoreResult?是一個(gè)新加入的類(lèi)哈垢,它也是一個(gè)基類(lèi),而且是抽象類(lèi)扛拨,這個(gè)類(lèi)作為?executeRequest:error:?返回內(nèi)容的父類(lèi)耘分,相當(dāng)于一個(gè)接口,它目前有兩個(gè)子類(lèi):?NSPersistentStoreAsynchronousResult?和NSBatchUpdateResult?。

????????你大概猜到了求泰,?NSBatchUpdateResult?對(duì)應(yīng)著前面的NSBatchUpdateRequest?央渣,下面說(shuō)說(shuō)?NSBatchUpdateRequest?。它有點(diǎn)像NSFetchRequest?:它允許你指定一個(gè)想要更新數(shù)據(jù)的實(shí)體渴频;也可以指定一個(gè)affectedStores?芽丹,它存儲(chǔ)了一個(gè)接受更新請(qǐng)求的?NSPersistentStore?數(shù)組。(其實(shí)它是?NSPersistentStoreRequest?的屬性)卜朗;它也有一個(gè)謂詞屬性來(lái)做更新的條件拔第,它跟?NSFetchRequest?中的謂詞一樣強(qiáng)大和靈活,類(lèi)似于SQL的where語(yǔ)句场钉;它允許你指定想要更新的字段蚊俺,通過(guò)?propertiesToUpdate?屬性來(lái)描述字段更新,它是一個(gè)字段逛万,key為?NSPropertyDescription?或?qū)傩悦址锯瑅alue為?NSExpression?或常量。

????????接著談?wù)?NSBatchUpdateResult?宇植,它有一個(gè)?result?屬性和?resultType屬性得封,?result?中的內(nèi)容跟?resultType?有關(guān),可能是成功或者失敗指郁,有可能是每行被更新的ID忙上,也可能是被更新的行數(shù)。

????????需要注意的是坡氯,由于?NSBatchUpdateRequest?并不會(huì)先將數(shù)據(jù)存入內(nèi)存晨横,而是直接操作數(shù)據(jù)庫(kù),所以并不會(huì)引起NSManagedObjectContext的同步更新箫柳,所以你不僅需要獲取?NSBatchUpdateResult?然后刷新?NSManagedObjectContext?對(duì)應(yīng)的數(shù)據(jù)和UI界面手形,還需要保證更新后的數(shù)據(jù)滿足數(shù)據(jù)庫(kù)模型上的?validation?,因?yàn)?NSManagedObjectContext?沒(méi)有感知Batch Updates悯恍,一些數(shù)據(jù)驗(yàn)證工作就落在了程序員的身上(你需要寫(xiě)一段代碼驗(yàn)證更新后的數(shù)據(jù)是合法的库糠,用戶可不希望在跑步APP上看到自己今天跑步里程是個(gè)負(fù)數(shù))。一旦有非法數(shù)據(jù)錄入數(shù)據(jù)庫(kù)涮毫,下次加載并修改?NSManagedObject?的時(shí)候就會(huì)導(dǎo)致數(shù)據(jù)驗(yàn)證失敗瞬欧。除了上面提到的這些,還要注意Batch Updates對(duì)數(shù)據(jù)庫(kù)的操作是樂(lè)觀鎖罢防,也就是假定很少會(huì)發(fā)生同時(shí)存取同一塊數(shù)據(jù)的情況艘虎,所以你需要制定一個(gè)合理的”merge”策略來(lái)應(yīng)付因同時(shí)更新數(shù)據(jù)產(chǎn)生的沖突。

????????Batch Updates的優(yōu)勢(shì)在于其效率咒吐,在處理上萬(wàn)條數(shù)據(jù)的時(shí)候野建,它執(zhí)行的時(shí)間跟SQL語(yǔ)句執(zhí)行時(shí)間相當(dāng)属划。

6.2 Asynchronous Fetching

????????Asynchronous Fetching的加入依然是為了解決CoreData讀取海量數(shù)據(jù)所帶來(lái)的問(wèn)題。通過(guò)使用Asynchronous Fetching候生,我們可以在抓取數(shù)據(jù)的同時(shí)不阻塞占用NSManagedObjectContext?同眯,并可以隨時(shí)取消抓取行為,隨時(shí)跟蹤抓取數(shù)據(jù)的進(jìn)度唯鸭。

????????設(shè)想我們平時(shí)用?NSFetchRequest?抓取數(shù)據(jù)的時(shí)候须蜗,我們會(huì)先用NSManagedObjectContext?的?executeFetchRequest:error:?方法傳入一個(gè)NSFetchRequest?,然后請(qǐng)求會(huì)被發(fā)送到?NSPersistentStore?目溉,然后執(zhí)行一段時(shí)間后返回一個(gè)數(shù)組明肮,在?NSManagedObjectContext?更新后,這個(gè)數(shù)組被當(dāng)做executeFetchRequest:error:?的返回值返回到我們這里停做。

而Asynchronous Fetching則不同晤愧,當(dāng)我們將一個(gè)NSAsynchronousFetchRequest?對(duì)象傳入?executeRequest:error:?方法后會(huì)立即返回一個(gè)“未來(lái)的”?NSAsynchronousFetchResult?大莫。NSAsynchronousFetchRequest?初始化時(shí)需要傳入兩個(gè)參數(shù)賦值給屬性:

????1.? ?completionBlock?屬性蛉腌,允許我們?cè)谧ト⊥瓿珊髨?zhí)行回調(diào)block;

????2.? fetchRequest?屬性只厘,類(lèi)型是?NSFetchRequest?烙丛。也即是說(shuō)雖然是異步抓取,其實(shí)我們用的還是以前的?NSFetchRequest?羔味,當(dāng)?NSFetchRequest?抓取結(jié)束后會(huì)更新?NSManagedObjectContext?河咽,這也就意味著NSManagedObjectContext?的并發(fā)類(lèi)型只能是NSPrivateQueueConcurrencyType? 或?NSMainQueueConcurrencyType。

????????于是當(dāng)我們用?NSAsynchronousFetchRequest?抓取數(shù)據(jù)時(shí)赋元,我們會(huì)先用NSManagedObjectContext?的?executeRequest:error:?方法傳入一個(gè)NSAsynchronousFetchRequest?忘蟹,這個(gè)方法在?NSManagedObjectContext?上執(zhí)行時(shí),?NSManagedObjectContext?會(huì)立即制造并返回一個(gè)NSAsynchronousFetchResult?搁凸,同時(shí)?NSAsynchronousFetchRequest?會(huì)被發(fā)送到?NSPersistentStore?媚值。你現(xiàn)在可以繼續(xù)編輯這個(gè)NSManagedObjectContext?中的?NSManagedObject?,等到NSPersistentStore?執(zhí)行請(qǐng)求完畢時(shí)會(huì)將結(jié)果返回給NSAsynchronousFetchResult?的?finalResult?屬性护糖,更新NSManagedObjectContext?褥芒,執(zhí)行?NSAsynchronousFetchRequest?的回調(diào)block。

????????舉個(gè)栗子:

let request = NSFetchRequest(entityName: "MyEntity")?????????

let?async = NSAsynchronousFetchRequest(fetchRequest: request){?????????????

????(id result)in?????????????

? ??if?result.finalResult {????????????????

????????? //TODO..????????????

?????}?????????

}

????????Swift代碼很簡(jiǎn)潔嫡良,并用了尾隨閉包語(yǔ)法锰扶,看不懂的朋友也不用著急,知道NSAsynchronousFetchRequest?大概的用法就行寝受。

????????之前提到過(guò)?NSAsynchronousFetchRequest?能在抓取數(shù)據(jù)的過(guò)程中跟蹤進(jìn)度坷牛,于是乎?NSProgress?登場(chǎng)了!一行代碼頂十句話:

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()

????????而取消獲取數(shù)據(jù)只需要取消?NSProgress?就可以了很澄!取消行為會(huì)沿著數(shù)的根節(jié)點(diǎn)蔓延到葉子京闰。

progress.cancel()可以在?cancellationHandler?屬性設(shè)置取消后執(zhí)行的block锨亏,這里不再多說(shuō)。


7 【NSSet】NSArray NSSet轉(zhuǎn)換

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】位運(yùn)算的運(yùn)算符優(yōu)先級(jí)問(wèn)題

????????在Javascript中忙干,位運(yùn)算的運(yùn)算符優(yōu)先級(jí)比加減號(hào)低器予,所以一定要注意,正確的寫(xiě)法是在位運(yùn)算符處加上括號(hào):

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

10 【JS】Js獲取當(dāng)前日期時(shí)間及其它操作

varmyDate = new Date();

myDate.getYear();????????//獲取當(dāng)前年份(2位)

myDate.getFullYear();????//獲取完整的年份(4位,1970-????)

myDate.getMonth();???????//獲取當(dāng)前月份(0-11,0代表1月)

myDate.getDate();????????//獲取當(dāng)前日(1-31)

myDate.getDay();?????????//獲取當(dāng)前星期X(0-6,0代表星期天)

myDate.getTime();????????//獲取當(dāng)前時(shí)間(從1970.1.1開(kāi)始的毫秒數(shù))

myDate.getHours();???????//獲取當(dāng)前小時(shí)數(shù)(0-23)

myDate.getMinutes();?????//獲取當(dāng)前分鐘數(shù)(0-59)

myDate.getSeconds();?????//獲取當(dāng)前秒數(shù)(0-59)

myDate.getMilliseconds();????//獲取當(dāng)前毫秒數(shù)(0-999)

myDate.toLocaleDateString();?????//獲取當(dāng)前日期

var mytime=myDate.toLocaleTimeString();?????//獲取當(dāng)前時(shí)間

myDate.toLocaleString( );????????//獲取日期與時(shí)間

日期時(shí)間腳本庫(kù)方法列表

Date.prototype.isLeapYear判斷閏年

Date.prototype.Format

日期格式化

Date.prototype.DateAdd

日期計(jì)算

Date.prototype.DateDiff

比較日期差

Date.prototype.toString

日期轉(zhuǎn)字符串

Date.prototype.toArray

日期分割為數(shù)組

Date.prototype.DatePart

取日期的部分信息

Date.prototype.MaxDayOfDate

取日期所在月的最大天數(shù)

Date.prototype.WeekNumOfYear

判斷日期所在年的第幾周

StringToDate

字符串轉(zhuǎn)日期型

IsValidDate

驗(yàn)證日期有效性

CheckDateTime

完整日期時(shí)間檢查

daysBetween

日期天數(shù)差

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時(shí)間

// 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;

}

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

//求兩個(gè)時(shí)間的天數(shù)差 日期格式為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);

}

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

//日期計(jì)算

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

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' )????//如果是字符串轉(zhuǎn)換為日期型

????{

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

????}

}

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

//日期輸出字符串捐迫,重載了系統(tǒng)的toString方法

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

Date.prototype.toString = function(showWeek)

{

????var myDate= this;

????var str = myDate.toLocaleDateString();

????if (showWeek)

????{

????????var Week = ['日','一','二','三','四','五','六'];

????????str += '星期' + Week[myDate.getDay()];

????}

????return str;

}

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

//日期合法性驗(yàn)證

//格式為: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就替換為''

????//數(shù)據(jù)庫(kù)中乾翔,合法日期可以是:YYYY-MM/DD(2003-3/21),數(shù)據(jù)庫(kù)會(huì)自動(dòng)轉(zhuǎn)換為YYYY-MM-DD格式

????var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2}[\-/]{ 1 }[\d]{ 1,2 }/g,'');

????if (s=='') //說(shuō)明格式滿足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('錯(cuò)誤的日期格式!格式為:YYYY-MM-DD或YYYY/MM/DD施戴。注意閏年反浓。');

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

????????}

????}

????else

????{

????????//alert('錯(cuò)誤的日期格式!格式為:YYYY-MM-DD或YYYY/MM/DD赞哗。注意閏年雷则。');

????????return false;

????}

????return true;

}

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

//日期時(shí)間檢查

//格式為: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;

}

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

//把日期分割成數(shù)組

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

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;

}

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

//取得日期數(shù)據(jù)信息

//參數(shù) interval 表示數(shù)據(jù)類(lèi)型

// y年 m月 d日 w星期 ww周 h時(shí) 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;

}

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

//取得當(dāng)前日期所在月的最大天數(shù)

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

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;

}

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

//取得當(dāng)前日期所在周是一年中的第幾周

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

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;

}

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

//字符串轉(zhuǎn)成日期類(lèi)型

//格式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;

}

//若要顯示:當(dāng)前日期加時(shí)間(如: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();????????????//時(shí)

????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的四種方法讀取文件內(nèi)容

//第一種方法: NSFileManager實(shí)例方法讀取數(shù)據(jù)

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類(lèi)方法讀取數(shù)據(jù)

data = [NSData dataWithContentsOfFile:thepath];

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

//第三種方法: NSString類(lèi)方法讀取內(nèi)容

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

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

//第四種方法: NSFileHandle實(shí)例方法讀取內(nèi)容

NSFileHandle* fh = [NSFileHandle fileHandleForReadingAtPath:thepath];

data = [fh readDataToEndOfFile];

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

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


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

這個(gè)問(wèn)題是由于默認(rèn)沒(méi)有引用Foundation.h導(dǎo)致

解決方案:

?????? 在代碼中引用#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.'

????解決方法:在頭文件中,將所繼承的父類(lèi)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請(qǐng)求數(shù)據(jù)時(shí)出現(xiàn)錯(cuò)誤Requestfailed:unacceptablecontent-type:text/html解決方法

????????使用AFNetworking 2.0請(qǐng)求數(shù)據(jù)時(shí)出現(xiàn)錯(cuò)誤 Request failed: unacceptable content-type: text/html ????????解決方法:

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

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

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


15 【JS】Js常用調(diào)試的方法

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


16 【JS】Safari調(diào)試工具

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


17 【地理位置】APP獲取本地地理位置時(shí)注意

????????APP中獲取本地地理位置時(shí),要注意打開(kāi)APP的地理位置授權(quán)藤乙,位置在設(shè)置—>隱私—>定位服務(wù)

?????? 不然獲取不到位置信息猜揪,而且沒(méi)有提示,而且APP一旦移除重新安裝坛梁,需要重新設(shè)置而姐。

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

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

19 【js】遍歷js對(duì)象并獲取某一個(gè)成員對(duì)象

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會(huì)添加?DEBUG=1?標(biāo)志

?*/

#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不調(diào)用didUpdateLocations

CLLocationManagerDelegate不調(diào)用didUpdateLocations

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

iOS8下的開(kāi)發(fā)變化

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

????????需要在使用CoreLocation前調(diào)用方法 requestWhenInUseAuthorization()或者requestAlwaysAuthorization()划咐,并在Info.plist中加入兩個(gè)缺省沒(méi)有的字段NSLocationAlwaysUsageDescription拴念、NSLocationWhenInUseUsageDescription?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市褐缠,隨后出現(xiàn)的幾起案子政鼠,更是在濱河造成了極大的恐慌,老刑警劉巖送丰,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缔俄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡器躏,警方通過(guò)查閱死者的電腦和手機(jī)俐载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)登失,“玉大人遏佣,你說(shuō)我怎么就攤上這事±空悖” “怎么了状婶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵意敛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我膛虫,道長(zhǎng)草姻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任稍刀,我火速辦了婚禮撩独,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘账月。我一直安慰自己综膀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布局齿。 她就那樣靜靜地躺著剧劝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抓歼。 梳的紋絲不亂的頭發(fā)上讥此,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音锭部,去河邊找鬼暂论。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拌禾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播展哭,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼湃窍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了匪傍?” 一聲冷哼從身側(cè)響起您市,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎役衡,沒(méi)想到半個(gè)月后茵休,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡手蝎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年榕莺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棵介。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钉鸯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邮辽,到底是詐尸還是另有隱情唠雕,我是刑警寧澤贸营,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站岩睁,受9級(jí)特大地震影響钞脂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捕儒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一芳肌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肋层,春花似錦亿笤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蒲拉,卻和暖如春肃拜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雌团。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工燃领, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锦援。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓猛蔽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親灵寺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曼库,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自:計(jì)算兩個(gè)日期相差天數(shù):轉(zhuǎn)載自:http://www.jb51.net/article/44927.htmf...
    天字一等閱讀 2,479評(píng)論 0 0
  • Js獲取當(dāng)前日期時(shí)間及其它操作 var myDate = new Date(); myDate.getYear()...
    郝赫閱讀 1,097評(píng)論 0 3
  • [Js獲取當(dāng)前日期時(shí)間及其它操作] 日期時(shí)間腳本庫(kù)方法列表 js代碼://--------------------...
    JS_swh閱讀 471評(píng)論 0 3
  • 臉上為她明媚的笑著 心里卻為她失戀了千萬(wàn)次 花在風(fēng)里飄香 那長(zhǎng)長(zhǎng)的多情毁枯,在笑我 后來(lái)只要有關(guān)青春 有關(guān)蓮池盛開(kāi)的夏...
    曾昭閱讀 286評(píng)論 2 1
  • 從阿爾山回來(lái)已經(jīng)很久了,忽然很想念那里的藍(lán)天白云叮称,更想念那里連綿不絕的金色种玛。 對(duì)它的印象,是從火車(chē)沿途五彩斑斕的山...
    青青苔閱讀 505評(píng)論 12 17