gpt4 book ai didi

ios - 从属性(property)中得到零

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:31 25 4
gpt4 key购买 nike

我有 2 个类,NSObjectDataParser 和一个 ViewController。在 DataParser 类中,我有一些解析 XML 的方法,并将结果保存到一个数组中,该数组是 DataParser 类的一个属性。我想在我的 ViewController 中向用户显示结果。我这里有这个属性 @property (strong, nonatomic) DataParser *parser; 并且在 viewWillAppear 方法中我创建了 DataParser 类的实例并且我'我试图通过这种方式获取结果数组

self.parser = [[DataParser alloc] init];
[self.parser downloadBooksXML];
NSLog(@"%@", self.parser.array);

但我仍然没有得到。有谁知道问题出在哪里?

- (void)downloadBooksXML
{
NSURL *url = [NSURL URLWithString:@"http://..."];

[self downloadDataFromURL:url withCompletionHandler:^(NSData *data) {
if (data) {
self.xmlParser = [[NSXMLParser alloc] initWithData:data];
self.xmlParser.delegate = self;
self.foundValue = [[NSMutableString alloc] init];
[self.xmlParser parse];
} else {
NSLog(@"Error");
}
}];
}

编辑:当我在 parserDidEndDocument 方法的 DataParser 类中记录数组时,它包含数据

最佳答案

[self.parser downloadBooksXML]返回时,还没有设置self.parser.array,因为数据还没有下载和解析。

一旦文档完成解析,数据将可用,您可以使用委托(delegate)方法检查:

- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"%@", self.parser.array);
}

因此您可以使用这样的模式:

- (void) viewDidLoad {
[super viewDidLoad];
self.parser = [[DataParser alloc] init];
[self.parser downloadBooksXML];
}

- (void) dataFinished {
NSLog(@"%@", self.parser.array);
// update the user interface
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self dataFinished];
}

根据您其他代码的实现,您可能需要切换到主队列来更新 UI:

- (void) dataFinished {
NSLog(@"%@", self.parser.array);

dispatch_async(dispatch_get_main_queue(), ^(void){
// update the user interface
});
}

关于ios - 从属性(property)中得到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com