为什么有时候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
83 0
|
JSON 数据格式
NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
209 0
为什么要优先使用copy声明NSString属性?
至于为什么要优先使用copy声明NSString属性?首先科普一下:对象在内存中都有一个入口地址,当我们取到这个对象的地址(也就是指针),可以去改变这个对象的一些属性值,而当我们再次去取这个对象,使用这个对象的属性值(我们已修改过的)时,我们会发现这个值确实变成了我们修改的值,当然,前提是需要这个对象没有被销毁,在内存中还存在。选择使用copy的理由是:NSString属性可能被传入一个NSString实例,也可能是一个NSMutableString实例。当传入了一个NSMutableString实例时,字符串的值可能会在背后悄悄变化。
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
NSString字符串相加连接的三种方法、判断是否包含字符串的方法
677 0
Object C学习笔记7-字符串NSString之一
  在Object C中存在两个类用于操作字符串,NSString和NSMutableString;NSString在赋值之后不能修改其内容和长度,而NSMutableString可以动态的修改字符串内容和长度,其主要区别就和.NET 中的string与StringBuilder之间的区别。
1002 0
Object C学习笔记2-NSLog 格式化输出数据
  1 . 几种常用类型变量声明     int i =10;       BOOL isShow=YES;      BOOL isShow=1;       float f = 3.1415926;       char a =120;       NSString *name...
1174 0
|
测试技术 索引
Object C学习笔记8-字符串NSString之二
  5. 字符串是否包含     hasPrefix 判断字符串是否以某个字符串开头     hasSuffix 判断字符串是否以某个字符串结尾 NSString *str1=@"Object C学习正在进行中.
1168 0
|
Windows
NSString的boolValue方法甚解
前言 NSString的boolValue之前有使用,但是一直没有真正了解什么时候返回YES(true)或NO(false)。其实,苹果在官方文档中已经写的很清楚,按command + control 点击boolValue进入文档就可以看到: boolValue The Boolean value of the string.
961 0