iOS 總結遇到的各種坑兒

weixin_34162695發表於2017-09-06

持續更新中。。。另一篇<iOS開發過程中遇到的新奇玩意兒>

一、將字串轉換成json時:

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
id obj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers
                                                          error:&err];

如果jsonString是以下格式,即包含\r\n換行符時,會解析失敗

{"content":"測試\r\n ","url":"http://www.baidu.com"}

二、跑專案的時候報錯:dyld: Symbol not found: OBJC_CLASS$_**

如果** 是自定義類的話,只需在Build Phases中的Compile Sources點選+新增那個類的.m。
如果 ** 是frameWork的話,只需在Build Phases中的Link Binary With Libraries將對應的frameWork右側的Required改為Optional。

三、float精度問題

在宣告float的時候值就不準:
static float a = 0.8;//0.8f也一樣
列印a絕對不是0.8,要比0.8大一點

目前解決辦法:
static const float a = 0.80;//這樣完全是0.800000

手動去掉5.0、5.500這種後邊的0

-(NSString*)converFloat:(CGFloat)floatValue{

    NSString * floatStr = [NSString stringWithFormat:@"%f",floatValue];
    
    const char * floatChars = [floatStr UTF8String];
    
    int strLength = (int)floatStr.length;
    
    int zeroCount = 0;
    
    for (int i = strLength-1; i>=0; i--) {
        if (floatChars[i] == '0' || floatChars[i] == '.') {
            zeroCount++;
            if (floatChars[i] == '.') {
                break;
            }
        }else{
            break;
        }
    }
  
    return [floatStr substringToIndex:strLength-zeroCount];
}

oc提供的貨幣計算,會自動去掉5.0、5.500這種後邊的0

-(NSString*)calculateFloatA:(CGFloat)a floatB:(CGFloat)b{
    
    NSString *strA = [NSString stringWithFormat:@"%f",a];
    NSString *strB = [NSString stringWithFormat:@"%f",b];
    
    NSDecimalNumber *numberA = [NSDecimalNumber decimalNumberWithString:strA];
    NSDecimalNumber *numberB = [NSDecimalNumber decimalNumberWithString:strB];
    
    /// 這裡不僅包含Multiply還有加 減 除。
    NSDecimalNumber *numResult = [numberA decimalNumberByMultiplyingBy:numberB];
    
    NSString *strResult = [numResult stringValue];
    
    
    NSLog(@"NSDecimalNumber method  unrounding = %@",strResult);
    
    return strResult;
}

四、時間NSDate 與NSString轉換

NSString轉換成NSDate會自動轉換成UTC時區。

五、tabbar圖片變大問題

R:tabbar自動放大了圖片,只要讓圖片保持原比例就行了
S: UIImage * nomalImage =[UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]];
UIImage * selectImage =[UIImage imageNamed:[NSString stringWithFormat:@"%@_sele",imageName]];
selectImage = [selectImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
nomalImage = [nomalImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

相關文章