1.在Appdelegate里的didFinishLaunching方法中用NSUserDefault在本地寫(xiě)入當(dāng)時(shí)獲取的日期,在ios9.2上會(huì)閃退,且僅在TestFlight測(cè)試版本或者App Store正式版本上閃退,直接運(yùn)行或者是ios9.2之外的版本,都沒(méi)有問(wèn)題,ios10.1以上沒(méi)有試過(guò)。
2.獲取當(dāng)前連接的WiFiName
swift版:
var wifiName:String?
??????? let interFaceNames = CNCopySupportedInterfaces() as? Array<CFString>
??????? for name in interFaceNames ?? [] {
??????????? let info = CNCopyCurrentNetworkInfo(name) as? NSDictionary
??????????? if info?["SSID"] != nil {
??????????????? wifiName = info?["SSID"] as? String
??????????????? break
??????????? }
??????? }
OC版:
NSString*ssid =nil;
??? NSArray *ifs = (__bridge_transfer id) CNCopySupportedInterfaces();
??? for(NSString*ifnam in ifs) {
??????? NSDictionary*info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
??????? if(info[@"SSID"]) {
??????????? ssid = info[@"SSID"];
??????? }
??? }
但是ios12上獲取不了,這里是原因和解決辦法,謝謝大佬!---->(http://www.itdecent.cn/p/4c6a09a10dc3?utm_campaign=hugo&)
ImportantTo use this function in iOS 12 and later, enable the Access WiFi Information capability for your app in Xcode. When you enable this capability, Xcode automatically adds the Access WiFi Information entitlement to your entitlements file and App ID.將Xcode的Access WIFI勾選后可以解決此問(wèn)題。
3.注意這些函數(shù)遵循Core Foundation的命名約定,只要函數(shù)名中包含?"Create" 或 "Copy"的函數(shù)返回的引用,都必須調(diào)用CFRelease來(lái)釋放。
4.NSData與NSString之間轉(zhuǎn)換
NSData轉(zhuǎn)NSString時(shí)為空?? 是由于在轉(zhuǎn)換成二進(jìn)制或者其他進(jìn)制時(shí),可能包含00,編碼是UTF8,所獲得的新字符就會(huì)為nil。
解決方法:
可以先把二進(jìn)制轉(zhuǎn)成字符指針或者字節(jié),在截取字符串不必要的字符“<”和“>”,
//將傳入的NSData類(lèi)型轉(zhuǎn)換成NSString并返回
-(NSString *)convertToNSString:(NSData *)data
{
? ? const unsigned char *szBuffer = [data bytes];
? ? if(!szBuffer){
? ? ? ? return nil;
? ? }
? ? NSMutableString *strTemp = [NSMutableString stringWithCapacity:[data length]*2];
? ? NSUInteger dataLength = [data length];
? ? for (NSInteger i=0; i < dataLength; ++i) {
? ? ? ? [strTemp appendFormat:@"%02lx",(unsigned long)szBuffer[i]];
? ? }
? NSString* result = [NSString stringWithString:strTemp];
? return result;
}
5.ios數(shù)組中添加唯一對(duì)象(參考這篇文章做了最簡(jiǎn)單的嘗試)
在這之前試過(guò)雙重嵌套,發(fā)現(xiàn)沒(méi)有什么用,要么就是只要重復(fù)就不添加(用addObject做加進(jìn)去),要么就是用removeObject做減法數(shù)組,判斷嵌套的兩個(gè)數(shù)組每個(gè)元素第一次重復(fù)時(shí)不予刪除,這樣因?yàn)槭乔短?,所以做到最后就是兩個(gè)數(shù)組相同元素重疊第一次的時(shí)候保留,重疊多次的時(shí)候去掉,沒(méi)有任何意義,這個(gè)枚舉器之前看過(guò),已經(jīng)忘了,待看。。。
for (NEHotspotNetwork*network in cmd.networkList) {
? ? ? ? ? ? ? ? __block BOOL isExist = NO;
? ? ? ? ? ? ? ? [self.networkListArr enumerateObjectsUsingBlock:^(NEHotspotNetwork * _Nonnull network2, NSUInteger idx, BOOL * _Nonnull stop) {
? ? ? ? ? ? ? ? ? ? if ([network2.SSID isEqualToString:network.SSID]) {//數(shù)組中已經(jīng)存在該對(duì)象
? ? ? ? ? ? ? ? ? ? ? ? *stop = YES;
? ? ? ? ? ? ? ? ? ? ? ? isExist = YES;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }];
? ? ? ? ? ? ? ? if (!isExist) {//如果不存在就添加進(jìn)去
? ? ? ? ? ? ? ? ? ? [self.networkListArr addObject:network];
? ? ? ? ? ? ? ? }
}
后臺(tái)寫(xiě)了一個(gè)純json的接口,要求上傳的圖片轉(zhuǎn)成base64的字符串,本來(lái)以為是要base64加密一下,發(fā)給他就行,結(jié)果服務(wù)器解析不了圖片參數(shù)。后來(lái)用了YYKit里面的NSData的類(lèi)別,可以識(shí)別了,但是我們開(kāi)發(fā)的SDK不能用這個(gè)文件(待研究),所以找了半天,終于明白是關(guān)鍵字沒(méi)搜對(duì),不是圖片base64加密,而是base64編碼,然后就找到正確答案了,這篇文章很實(shí)用(在線校驗(yàn)圖片base64編碼)
8.宏定義遇見(jiàn)的問(wèn)題
```
#define getRectNavAndStatusHight? [[UIApplication sharedApplication] statusBarFrame].size.height+self.navigationController.navigationBar.frame.size.height
CGFloat tabHeight = ScreenHeight() - (getRectNavAndStatusHight);
```
宏定義中有運(yùn)算符,當(dāng)宏定義在被運(yùn)算時(shí),并不會(huì)把宏定義運(yùn)算完后作為常數(shù)運(yùn)算,而是直接把定義式加入運(yùn)算,所以宏定義有運(yùn)算符時(shí),必須把宏定義單獨(dú)加括號(hào),優(yōu)先運(yùn)算。
9.NSDate與0時(shí)區(qū)
[NSDate date];獲取的是0時(shí)區(qū)時(shí)間,但是打印出來(lái)的前半段是當(dāng)?shù)貢r(shí)區(qū)的時(shí)間,因?yàn)闀r(shí)差在后面有個(gè)+8000,所以打印出來(lái)的其實(shí)也是0時(shí)區(qū)時(shí)間,不過(guò)是需要自己計(jì)算的,想要計(jì)算當(dāng)前時(shí)區(qū)的時(shí)間,①要么截取獲取到的前半段當(dāng)?shù)貢r(shí)間通過(guò)NSDateFormatter轉(zhuǎn)化為yyyy-MM-dd HH:mm:ss來(lái)直接顯示,②要么獲取當(dāng)前時(shí)間到1970的秒數(shù)加上獲取時(shí)區(qū)的時(shí)差秒數(shù),最后得到時(shí)間。
10.[ios13.0-13.2presentView 彈出的view會(huì)像actionsheet一樣,頂部會(huì)有一部分露出根視圖](http://www.itdecent.cn/p/4f96d078f1f3)
想要彈出view完全覆蓋整屏,要修改UIViewController里面的一個(gè)屬性,即:modalPresentationStyle
UIModalPresentationStyle是一個(gè)枚舉NS_ENUM類(lèi)型的,我們所需要的全屏推入的方法就對(duì)應(yīng) 0 這個(gè)選項(xiàng)即UIModalPresentationFullScreen
所以如果需要還原之前的效果的話
```
presentVc.modalPresentationStyle=.fullScreen//swift
presentVc.modalPresentationStyle=0;//OC
```