我需要将一个.xml文件从URL地址加载到NSData对象中,以便使用我已经拥有的一些库进行进一步解析(但是他们问我.xml文件是NSData),我该怎么做?
url格式是这样的:
我正在使用AsyncSocket的客户端/服务器应用程序.对于传输数据,它使用NSData.
如何将包含NSNumbers,NSIntegers和NSStrings的自定义对象插入到NSData对象中然后将其取出?
我测试了这段代码,但它导致了SIGABRT错误.
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Run Code Online (Sandbox Code Playgroud)
NSData是xml格式的plist数据.这段代码工作正常.
[urlData writeToFile:[self docPath] atomically:YES];
array = [[NSMutableArray alloc] initWithContentsOfFile:[self docPath]];
Run Code Online (Sandbox Code Playgroud)
如何在没有文件转换的情况下将NSData更改为NSArray?
将NSString转换为NSData有不同的方法.
NSString *req_string = @"I am a NSString.";
NSData *req_data = [NSData dataWithBytes:[req_string UTF8String] length:[req_string length]];
// or
NSData *req_data_alt = [req_string dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?
我有一个NSData对象,应该像字节数组一样工作.
我需要得到1st and 2nd bytes in the NSData,但不知道如何.
如果我在Java中有一个字节数组,我可以很容易地获得那些barray[0] and barray[1],但是我如何为NSData做呢?
谢谢
不缓存数据的选项是NSDataReadingUncached.
但是,如果我dataWithContentsOfURL用来更新UITableViewCell(每个单元格一个图像)的URL中的图像,并且我在Mac上查看模拟器上的活动监视器(作为iOS 5.1模拟器运行),那么网络流量会跳升到12kb/s当我连续上下滚动桌子时的接收率.当我停止上下滚动时,网络活动下降到约2kb/s接收率或更低.那些图像非常小,每个像20kb左右,当我上下滚动时,我只会使1或2个图像消失/出现,所以缓存(如果有的话)根本不需要很大.
所以它确实看起来dataWithContentsOfURL不会缓存数据,即使我使用dataWithContentsOfURL:options:error:选项0意味着没有选项,网络活动仍然会跳到大约12kb/s.
所以做dataWithContentsOfURL缓存数据,如果没有,为什么dataWithContentsOfURL:options:error:还没有缓存数据的选项?
还完成了以下工作:
[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad但是网络速度仍然会跳起来.我认为通常的建议是,如果需要缓存,那么使用NSURLConnection,但由于某种原因,在NSURLConnectionApple的文档中引用,"缓存"或"缓存"这个词根本没有出现,除了提到示例项目称为"URLCache",但根本没有提到缓存.
我们知道可以使用方法压缩图像,UIImageJPEGRepresentation()如下面的代码所示.
NSData *imgData = UIImageJPEGRepresentation(imageResized, 0.5);
NSLog(@"imgData.length :%d",imgData.length);
imageResized = [UIImage imageWithData:imgData];
NSData *imgData2 = UIImageJPEGRepresentation(imageResized, 1);
NSLog(@"imgData2.length :%d",imgData2.length);
Run Code Online (Sandbox Code Playgroud)
日志是:
2013-02-25 00:33:14.756 MyApp[1119:440b] imgData.length :371155
2013-02-25 00:33:20.988 MyApp[1119:440b] imgData2.length :1308415
Run Code Online (Sandbox Code Playgroud)
什么IM困惑的是,为什么length的imgData和imgData2是不同的.在我的应用程序中,图像应上传到服务器.我应该上传NSData到服务器以节省存储空间吗?Android手机可以下载NSData并将其转换为图像吗?任何帮助将不胜感激!
如何将[NSString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]结果转换为C字符串?
返回一个NSData对象,该对象包含使用给定编码进行编码的接收器的表示形式。
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag
Run Code Online (Sandbox Code Playgroud)
请注意,dataUsingEncoding:allowLossyConversion:返回的数据不是严格的C字符串,因为它没有NULL终止符。
如何在我的开头插入一个字节NSMutableData?我知道有一个replaceBytesInRange:方法,但只会替换字节.有很多insertXAtIndex:方法,但没有一个是字节.我怎样才能做到这一点?我能想到这样做的一种方法是:
NSMutableData *theData = [NSMutableData dataWithBytes:myByte];
[theData appendData:myOriginalData];
myOriginalData = nil;
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法.
我也试过这个,但它不起作用:
char *sec = "Second!";
char *fir = "First!";
NSMutableData *theData = [NSMutableData dataWithBytes:(const void *)sec length:7];
[theData replaceBytesInRange:NSMakeRange(0, 0) withBytes:(const void *)fir];
NSString *str1 = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
NSLog(@"%@", str1); //Prints "Second!"
Run Code Online (Sandbox Code Playgroud) 我有一个返回NSMutableData的方法.我需要将此NSMutableData传递给另一个方法,但该方法只需要NSData.我试图找到任何方法/解决方案将NSMutableData转换为NSdata.但仍然没有运气.
在Objective C中,它可以像NSData*immutableData = [NSData dataWithData:mutableData];
我不确定如何在Swift中完成它?有人可以帮助我吗?