Mac*_*ret 0 xml parsing objective-c ios
我有一个UIViewController *menuController
我调用的地方NSObject
class *parserClass
所以我的应用程序开始解析xml并NSDictionary
从结果中创建一个.我想回到menuController
那本字典.
在menuController
我这样做:
[parserClass startParsing:link];
然后在parserClass中一切正常,但我怎样才能将创建的字典返回给视图控制器.
现在我正在进行以下操作,但我现在不是最好的方法:
有更好的想法吗?谢谢.
我喜欢块建议,但如果解析器在到达下面的comp行之前没有完成,该怎么办:
(void)startParsing:link withCompletionBlock:(myCompletion)comp {
parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:link]];
[parse setDelegate:self]; [解析解析];
Run Code Online (Sandbox Code Playgroud)comp(results);
}
你可以使用块:
[parserClass startParsing:link withCompletionBlock:ˆ(NSDictionary *results)
{
// do something with results
}];
Run Code Online (Sandbox Code Playgroud)
[NSXMLParser parse]方法是同步的,因此它将阻塞直到解析完成.因为在这个例子中,使用完成块完全没有意义,因为你可以简单地返回一个值.您要实现的目标可能是在后台线程上运行解析器,然后在完成后通知.如果这是真的那么你可以写这样的东西:
- (void)startParsing:(NSURL *)url withCompletionBlock:ˆ(NSDictionary *results)comp
{
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
ˆ{
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:weakSelf];
[parser parse];
comp(weakSelf.results);
}];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
204 次 |
最近记录: |