NSData数据类型的讲解

NSData,数据,当我们需要把一些信息写入到文件里或发送到网络上,我们需要把这些数据转换下,变成纯粹的0、1字符流
也就是网络中要传数据的的时候,我们通常会用相应的NSData的数据来进行存储。

1、 NSData 与 NSString:  //转成UTF8的数据
NSString * str = @"hello, world!";
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
//NSString转换成NSData类型
NSString * neswStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//将Data数据转化为字符串

2. NSData 与 UIImage
NSData->UIImage
UIImage *aimage = [UIImage imageWithData: imageData];
 
//例:从本地文件沙盒中取图片并转换为NSData

NSData *imageData = [NSData dataWithContentsOfFile: finalPath];
// finalPath为获取图片的路径,获取图片的数据
UIImage *aimage = [UIImage imageWithData: imageData];
//将图片的数据转化为图片

3.NSData与NSArray  NSDictionary
+(NSString *)getLocalFilePath:(NSString *) fileName
{
 return [NSString stringWithFormat:@"%@/%@%@", NSHomeDirectory(),@“Documents”,fileName];
}
包括将NSData写进Documents目录,从Documents目录读取数据
在进行网络数据通信的时候,经常会遇到NSData类型的数据。
在该数据是dictionary结构的情况下,系统没有提供现成的转换成NSDictionary的方法,为此可以通过Category对NSDictionary进行扩展,以支持从NSData到NSDictionary的转换。

下面是在NSdictionary中添加转化为NSData的方法。
+ (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data {  

    CFPropertyListRef list = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data, kCFPropertyListImmutable, NULL);
    if(list == nil) return nil;
    if ([(id)list isKindOfClass:[NSDictionary class]]) {
         return [(NSDictionary *)list autorelease];
        }
    else {
         CFRelease(list);
         return nil;
        }
}

NSData生成:
NSDictionary *dic =[NSDictionary dictionaryWithObject:@"hello" forKey:@"KEY"];
NSData *d = [NSKeyedArchiver archivedDataWithRootObject:dic];
从文件生成NSData:
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"hello"  ofType:@"png"];
NSData *d = [[NSData alloc] initWithContentsOfFile:  path];
 取得元素长度:
int i = [d length];
NSData型转成NSDictionary型:
NSDictionary *reverse = [NSKeyedUnarchiver unarchiveObjectWithData: d];

4.NSData与NSDate

//函数作用 :date根据formatter转换成string
+(NSString*)dateToString:(NSString *)formatter date:(NSDate *)date
{
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:formatter];
    return[dateFormatter stringFromDate:date];
}

//函数作用 :string类型的时间戳转换成时间
+(NSString*)dateStringToString:(NSString *)dateStr
{
    if ([dateStr isKindOfClass:[NSNull class]]) {
        return nil;
    }
    else{
        NSInteger time = [dateStr intValue];
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:time];
        NSString *timestr = [NSString stringWithFormat:@"%@",date];
        NSRange rang;
        rang.location = 0;
        rang.length = 10;
        NSString *needtime = [timestr substringWithRange:rang];
        return needtime;
    }
}


//函数作用 :将日期从原格式转换成需要的格式
+(NSString*)convertDateFormatter:(NSString*)sourceFormatter
                  targetFormatter:(NSString*)targetFormatter  
                       dateString:(NSString*)dateString
{   
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:sourceFormatter];
    NSDate *date = [dateFormatter dateFromString:dateString];
    [dateFormatter setDateFormat:targetFormatter];
    return[dateFormatter stringFromDate:date];
}

//函数作用 :将日期字符串转换成date
+(NSDate *)stringToDate:(NSString *)formatter dateString:(NSString *)dateString{
 NSDateFormatter *dateFormatter= [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter setDateFormat:formatter];
 return [dateFormatter dateFromString:dateString];
}


//时间戳转换成时间
                NSInteger time = [[dic objectForKey:@"press_date"] intValue];
                NSDate *date = [NSDate dateWithTimeIntervalSince1970:time];
                NSString *timestr = [NSString stringWithFormat:@"%@",date];
                NSRange rang;
                rang.location = 0;
                rang.length = 10;
                NSString *needtime = [timestr substringWithRange:rang];
sh
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值