我正在尝试使用 TBXML 解析 XML 文件并将值放入多维 NSMutableArray
但问题是这些值没有被添加到数组中,如果我输出这些值,那么它会返回 null 和 0 。
这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
[self downloadAndParseXml"http://www.w3schools.com/XML/note.xml"];
// RETURNS 0
NSLog(@"weatherArray count: %d", [weatherArray count]);
// RETURNS NULL
NSLog(@"weatherArray value: %@", weatherArray[0][0]);
}
- (void)downloadAndParseXmlNSString *)xmlUrl
{
// Allocating the array
weatherArray = [NSMutableArray array];
TBXMLSuccessBlock sBlock = ^(TBXML *tbxmlDocument) {
if (tbxmlDocument.rootXMLElement)
[self fillArrayWithXmlContents:tbxmlDocument.rootXMLElement];
};
TBXMLFailureBlock fBlock = ^(TBXML *tbxmlDocument, NSError *error) {
NSLog(@"Failureblock: %@\n%@", [error localizedDescription], [error userInfo]);
};
[TBXML newTBXMLWithURL:[NSURL URLWithString:xmlUrl] success:sBlock failure:fBlock];
}
- (void)fillArrayWithXmlContentsTBXMLElement *)element {
do {
if (element->firstChild)
[self fillArrayWithXmlContents:element->firstChild];
if ([[TBXML elementName:element] isEqualToString"note"]) {
// Adding values into the multidimensional array
[weatherArray addObject:[NSArray arrayWithObjects:
[TBXML textForElement:[TBXML childElementNamed"to" parentElement:element]],
[TBXML textForElement:[TBXML childElementNamed"from" parentElement:element]],
[TBXML textForElement:[TBXML childElementNamed"heading" parentElement:element]],
[TBXML textForElement:[TBXML childElementNamed"body" parentElement:element]], NULL]];
// Correct value is getting logged
NSLog(@"weatherArray value: %@", weatherArray[0][0]);
}
} while ((element = element->nextSibling));
}
Best Answer-推荐答案 strong>
您可能需要做的是等待进程完成,并且该 block 实际上不知道您在其中做什么,或者我会说内部函数未被 block 捕获。所以使用数组(仅在 block 完成后调用正在使用您的数组的函数。
例子:
TBXMLSuccessBlock s = ^(TBXML *tbxml) {
NSLog(@"yes");
// Do something with TBXML object "tbxml/add it ur array
//Here you call the function which is about to use your array.
};
//Not outside the block.
编辑:引用这个==> How do I avoid capturing self in blocks when implementing an API?
关于iphone - NSMutableArray 没有获取 XML 值,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/18504999/
|