为什么有时候NSData转换成NSString的时候返回nil

简介:

为什么有时候NSData转换成NSString的时候返回nil

有时候,NSData明明有值,可是,当转换成NSString的时候,却没有值,现在来进行测试:)

-现在提供测试用素材-

源码如下:

//
//  AppDelegate.m
//  TestNSData
//
//  Created by YouXianMing on 14-8-30.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 获取bundle路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouXianMing.png"
                                                     ofType:nil];
    
    // 获取文件
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    // 打印文件长度
    NSLog(@"data.length = %lu", (unsigned long)data.length);
    
    return YES;
}

@end

打印结果如下:

2014-08-30 07:47:16.146 TestNSData[1382:60b] Cannot find executable for CFBundle 0x8e5dfe0 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/AccessibilityBundles/CertUIFramework.axbundle> (not loaded)

2014-08-30 07:47:16.193 TestNSData[1382:60b] data.length = 1210569

我们把NSData转换成NSString试一下:)

//
//  AppDelegate.m
//  TestNSData
//
//  Created by YouXianMing on 14-8-30.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 获取bundle路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouXianMing.png"
                                                     ofType:nil];
    
    // 获取文件
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    // 打印文件长度
    NSLog(@"data.length = %lu", (unsigned long)data.length);
    
    // 将NSData转换为字符串
    NSString *dataStr = [[NSString alloc] initWithData:data
                                              encoding:NSUTF8StringEncoding];
    
    NSLog(@"dataStr = %@", dataStr);
    
    return YES;
}

@end

打印结果如下:

2014-08-30 08:02:30.617 TestNSData[1459:60b] Cannot find executable for CFBundle 0x99add90 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/AccessibilityBundles/CertUIFramework.axbundle> (not loaded)

2014-08-30 08:02:30.800 TestNSData[1459:60b] data.length = 1210569

2014-08-30 08:02:30.801 TestNSData[1459:60b] dataStr = (null)

注意,上面的打印是null哦:)

 

以下给出解释:

You can't convert an UIImage to NSString by using initWithData:encoding: method. This method is only for converting an string's data to NSString (an Text File for example).

If you are trying to convert any kind of binary data to NSString, there are some kind of encoding available. Base64 is widely used.

你不能够将UIImage通过方法initWithData:encoding:来转换.这个方法只能够转换字符格式的data(例如文本格式的文件).

如果你尝试着将任意类型的NSData转换成NSString,有许多编码可供你选择.Base64是使用最广泛的.

 

结论:

你只能够将字符格式的NSData转换成字符串.

目录
相关文章
NSString中如何正确判断包含一个变量字串NSString
NSString中如何正确判断包含一个变量字串NSString
82 0
|
JSON 数据格式
NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
206 0
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
674 0
Object C学习笔记7-字符串NSString之一
  在Object C中存在两个类用于操作字符串,NSString和NSMutableString;NSString在赋值之后不能修改其内容和长度,而NSMutableString可以动态的修改字符串内容和长度,其主要区别就和.NET 中的string与StringBuilder之间的区别。
1001 0
Object C学习笔记2-NSLog 格式化输出数据
  1 . 几种常用类型变量声明     int i =10;       BOOL isShow=YES;      BOOL isShow=1;       float f = 3.1415926;       char a =120;       NSString *name...
1173 0
|
测试技术
Object C学习笔记9-字符串NSMutableString
  NSMutableString类继承自NSString,所以在NSString中的方法在NSMutableString都可以使用. NSMutableString和NSString的区别在于NSMutableString是动态的字符串,可以动态的添加,修改,删除等。
897 0
|
测试技术 索引
Object C学习笔记8-字符串NSString之二
  5. 字符串是否包含     hasPrefix 判断字符串是否以某个字符串开头     hasSuffix 判断字符串是否以某个字符串结尾 NSString *str1=@"Object C学习正在进行中.
1167 0
|
Windows
NSString的boolValue方法甚解
前言 NSString的boolValue之前有使用,但是一直没有真正了解什么时候返回YES(true)或NO(false)。其实,苹果在官方文档中已经写的很清楚,按command + control 点击boolValue进入文档就可以看到: boolValue The Boolean value of the string.
959 0