- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用从另一个 Web 服务检索的 url 获取图像数据,并且我需要更新模型对象时,我总是在更新相应的 View 时遇到问题。本质上,这是问题所在:
- (void)searchFlickrForTerm:(NSString *) term completionBlock:(FlickrSearchCompletionBlock) completionBlock
{
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
_session = [NSURLSession sessionWithConfiguration:config
delegate:self
delegateQueue:nil];
NSString *requestString = [Flickr flickrSearchURLForSearchTerm:term];
NSURL *url = [NSURL URLWithString:requestString];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
if (error != nil) {
completionBlock(term,nil,error);
}
else{
NSDictionary *searchResultsDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
//This is the segment where we parse the Flickr data
NSString * status = searchResultsDict[@"stat"];
if ([status isEqualToString:@"fail"]) {
NSError * error = [[NSError alloc] initWithDomain:@"FlickrSearch" code:0 userInfo:@{NSLocalizedFailureReasonErrorKey: searchResultsDict[@"message"]}];
completionBlock(term, nil, error);
} else {
NSArray *objPhotos = searchResultsDict[@"photos"][@"photo"];
NSMutableArray *flickrPhotos = [@[] mutableCopy];
for(NSMutableDictionary *objPhoto in objPhotos)
{
//Good Idea to parse in the web service call itself. The structure might be different
//If parse in the model class, can be very complicated if the structure is different
FlickrPhoto *photo = [[FlickrPhoto alloc] init];
photo.farm = [objPhoto[@"farm"] intValue];
photo.server = [objPhoto[@"server"] intValue];
photo.secret = objPhoto[@"secret"];
photo.photoID = [objPhoto[@"id"] longLongValue];
NSString *searchURL = [Flickr flickrPhotoURLForFlickrPhoto:photo size:@"m"];
//Call to retrieve image data
NSURLSessionDownloadTask *getImageTask = [_session downloadTaskWithURL:[NSURL URLWithString:searchURL] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error){
UIImage *downloadImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
photo.thumbnail = downloadImage;
}];
[getImageTask resume];
[flickrPhotos addObject:photo];
}
completionBlock(term,flickrPhotos,nil);
}
//End parse of Flickr Data
}
}];
[dataTask resume];
//End
}
NSURLSessionDownloadTask *getImageTask = [_session downloadTaskWithURL:[NSURL URLWithString:searchURL] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error){
UIImage *downloadImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
photo.thumbnail = downloadImage;
}];
[getImageTask resume];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:searchURL]
options:0
error:&error];
UIImage *image = [UIImage imageWithData:imageData];
photo.thumbnail = image;
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
最佳答案
好的,在仔细研究了 Apple 的文档之后,我想我知道了这个问题。
本质上,在我的方法 A 中,downloadTaskWithURL 将分拆另一个后台线程。因此,即使我已经更新了模型对象,除非我再次捕获主线程并刷新 View ,否则 View 不会用新信息更新。
但是,在方法 B 中,dataWithContentsOfURL 同步运行。因此,根本不存在后台线程的问题。
来自苹果文档:
dataWithContentsOfURL: Returns a data object containing the data from the location specified by a given URL.
Discussion This method is ideal for converting data:// URLs to NSData objects, and can also be used for reading short files synchronously. If you need to read potentially large files, use inputStreamWithURL: to open a stream, then read the file a piece at a time.
关于ios - dataWithContentsOfURL 与 downloadTaskWithURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24206568/
我正在按照 Apple Dev 的思路为表实现并发 imageLoader。 NSOpertaion 上的视频。 有趣的是(至少对我而言),在我的 NSOperation 的 main 中,我有这行代
不缓存数据的选项是 NSDataReadingUncached。 但是如果我使用 dataWithContentsOfURL 从 UITableViewCell 中的 URL 更新图像(每个单元格一个
我有这个按钮点击(下载)的方法。问题是它由于异常而终止: [Session started at 2011-03-14 13:06:45 +0530.]2011-03-14 13:06:45.710
我试图弄清楚 dataWithContentsOfURL 是否缓存内容,以便如果在代码中: UIImage *img = [UIImage imageWithData:[NSData dataWith
我正在尝试获取此页面 (http://www.sanmarinocard.sm) 的源代码,但 dataWithContentsOfURL 未检索到数据。 NSURL *url = [NSURL UR
我有一个在后台运行的 NSOperation 子类。它是非并发的。它从 URL 下载一些数据,然后对数据进行一些处理。 由于它已经在后台运行,因此我使用 [NSData dataWithContent
NSData +dataWithContentsOfURL 默认有任何类型的缓存吗?有没有人使用这种方法尝试过某种问题,从网络获取数据的最有效方法是什么? 最佳答案 使用 ASIHTTPRequest
我们使用dataWithContentsOfURL是因为它很简单... NSData *datRaw = [NSData dataWithContentsOfURL:ur]; 现在,当然,这将挂起主U
我正在为Stack Exchange API制作iOS客户端。经过漫长的争执,我终于设法实现了身份验证-这给了我一个粘贴在URL中的 token 。当 token 有效时,URL如下所示: https
当我使用从另一个 Web 服务检索的 url 获取图像数据,并且我需要更新模型对象时,我总是在更新相应的 View 时遇到问题。本质上,这是问题所在: 调用 Web 服务 A 检索图像 URL - 第
我正在尝试使用 URL 的内容创建 NSData: NSString *theUrl = [NSString stringWithString:@"http://127.0.0.1:8090"]; N
我在使用 NSData dataWithContentsOfURL 时遇到一些性能问题... NSURL *url = [NSURL URLWithString:Imagepath]; NSData
我正在使用 Xcode 4.6.3 和 iOS 5.5/6.1.6。 我正在使用后台线程将大量 jpg 从服务器加载到 iOS 设备。 dispatch_async(kBgQueue, ^
这个问题可能有一个非常简单的答案,但我似乎无法具体说明。 我正在使用(见下文)获取网址的内容 NSData *data = [NSData dataWithContentsOfURL:webURL];
由于某种原因,以下代码有时可以工作。我已经检查了很多次 URL,这并不有趣(它返回我想要解析的纯文本)。该代码 100% 正常工作,然后它停止工作并开始给我一个 EXC_BAD_ACCESS 错误。
关于以下内存管理的问题: NSData *returnData = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]
我正在开发一个 iOS 应用程序,我正在尝试通过测试驱动开发 来完成它。我已经阅读了很多关于这个主题的书,其中一件事是我在 book 中遇到的。是测试应该快速、可重复且可靠。因此,在编写网络代码测试时
我在服务器端进行 IAP 收据验证。为此,我发送了 SKPaymentTransaction' transactionReceipt。 现在 transactionReceipt 已被弃用,我尝试使用
我在这里遇到了一个奇怪的问题。 这是我第一次制作数据库、编写 PHP 代码并从 ios 应用程序中提取输出( objective-c )。然而,我正在遵循 swift 教程,并且成功翻译了代码。 我创
我有一些存储在相机胶卷中的视频的 URL。例如: file:///var/mobile/Media/DCIM/100APPLE/IMG_0249.MP4 我想将这些视频进一步处理为 NSData,但是
我是一名优秀的程序员,十分优秀!