Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSO操作相关操作和相关对象_Ios_Objective C_Cocoa Touch_Cocoa_Nsoperation - Fatal编程技术网

Ios NSO操作相关操作和相关对象

Ios NSO操作相关操作和相关对象,ios,objective-c,cocoa-touch,cocoa,nsoperation,Ios,Objective C,Cocoa Touch,Cocoa,Nsoperation,我有两个不同的NSOperation子类。一个从服务器下载提要,另一个要解析 @interface FeedDownloader:NSOperation @property(nonatomic, strong) NSString *downloadedFeed; @end @interface FeedParser:NSOperation @property(nonatomic, strong) NSString *feedToParse; @end 然后,在我的“视图控制器”中,我将这

我有两个不同的
NSOperation
子类。一个从服务器下载提要,另一个要解析

@interface FeedDownloader:NSOperation
 @property(nonatomic, strong) NSString *downloadedFeed;
@end

@interface FeedParser:NSOperation
 @property(nonatomic, strong) NSString *feedToParse;
@end
然后,在我的“视图控制器”中,我将这些操作添加到我的
NSOperationQueue
并设置依赖项

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
FeedDownloader *downloader = [[FeedDownloader alloc] init];
FeedParser *parser = [[FeedParser alloc] init];
[parser addDependency:downloader];
[downloader addObserver:self forKeypath: @"isFinished" context:kDownloaderContext];
[queue addOperation:downloader];
[queue addOperation:parser];

现在,我从下载程序得到“KVO通知”,它完成了feed的下载。下载完成后和开始解析之前,如何将下载的提要传递给解析器

在您的
FeedParser
类中,您可以确保
isReady
在设置了所需的数据之前是不正确的-这样,操作在具有依赖项之前不会过早启动

有很多方法可以做到这一点——我想到的第一件事就是使用下载操作的完成块

__weak __typeof(parser)     weakParser     = parser;
downloader.completionBlock = ^{
  weakParser.feedToParse = downloader.downloadedFeed;
};

您可以声明一个协议,可能是
FeedProvider
,它有一个方法,通过该方法,
FeedParser
可以请求一个提要字符串。制作
FeedDownloader
采用
FeedProvider
。为
FeedParser
提供类型为
id
provider
属性。在创建时,为
解析器
对象提供对
下载程序
对象作为其提供者的引用