Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Objective c Cocoa-应用程序在从XML加载数据时冻结_Objective C_Cocoa_Nsprogressindicator - Fatal编程技术网

Objective c Cocoa-应用程序在从XML加载数据时冻结

Objective c Cocoa-应用程序在从XML加载数据时冻结,objective-c,cocoa,nsprogressindicator,Objective C,Cocoa,Nsprogressindicator,我正在从XML文件加载大量数据。此数据正在“冻结”应用程序。我想在加载数据时显示一个进度条 我如何知道大部分操作已经完成,以便更改进度条显示的百分比?谢谢[答] 已编辑:主要问题是,由于要分析的数据量很大,应用程序在加载期间冻结。一些人建议使用后台线程加载和解析数据。。这可行吗?一次将文件读入内存@4k?显示加载字节与文件大小的过程 另外还要计算出总行数以及解析器当前所在的行 假设您使用的是NSXMLParser “冻结”来自于您在主线程上进行加载/解析。如果您可以让我们GCD尝试执行disp

我正在从XML文件加载大量数据。此数据正在“冻结”应用程序。我想在加载数据时显示一个进度条

我如何知道大部分操作已经完成,以便更改进度条显示的百分比?谢谢[答]


已编辑:主要问题是,由于要分析的数据量很大,应用程序在加载期间冻结。一些人建议使用后台线程加载和解析数据。。这可行吗?

一次将文件读入内存@4k?显示加载字节与文件大小的过程

另外还要计算出总行数以及解析器当前所在的行

假设您使用的是NSXMLParser


“冻结”来自于您在主线程上进行加载/解析。如果您可以让我们GCD尝试执行dispatch_async(),并在完成时向主线程发送更新,并更新进度。

如果您使用的是NSXML解析器

NSUInteger count = [[rootElement nodesForXPath:@"//Video" error:&error] count];
//this will give you the number of elements
//then after parsing each element, calculate the percentage of elements parsed. 

//i.e. num_of_elements_parsed/total_no_elements*100;
//based on this value, use a del;egate method to update your NSProgressIndicator 
// in this method increment the  num_of_elements_parsed counter
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    if ([elementName isEqualToString:@"resident"]) {

        self.count += 1; 

    }
}

请问4k的数字是从哪里来的?只是一个缓冲区的大小,我倾向于从巨大的文件负载开始。试着找出你的瓶颈,是文件加载吗?我猜这是在解析xml并从中创建对象。首先尝试生成xml解析器的进度。您能为使用GCD提供一些参考吗?谢谢。我已经读过GCD(中央大调度)。基本上这是苹果的说法,对吗?我从来没有在这种语言中使用过线程,所以这是一个全新的领域。。感谢您可能给我的任何进一步帮助。对于大多数用户来说,GCD比担心线程更容易。是一个非常好的参考,可以了解所有内容。此外,“冻结”的问题是,如果我切换到另一个应用程序,然后返回到有问题的应用程序,该应用程序将不会显示,直到整个加载过程完成。。。这会使整个进度条变得无关紧要。有什么办法可以解决这个问题吗?谢谢。是的,这是一个桌面应用程序,特别是设置的首选应用程序。Ic,这很有意义。谢谢。但是,我仍然有一个问题,屏幕对我来说是“冻结”的,因此只更新进度条对用户没有影响-当屏幕恢复正常时,他只会看到100%的进度条。。谢谢你!检查此链接