相关疑难解决方法(0)

iOS启动后台线程

我的iOS设备上有一个小的sqlitedb.当用户按下按钮时,我从sqlite获取数据并将其显示给用户.

这个抓取部分我想在后台线程中执行它(不阻止UI主线程).我是这样做的 -

[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];

在获取和稍微处理之后,我需要更新UI.但是因为(作为一种好的做法)我们不应该从后台线程执行UI更新.我这样打电话给selector主线程 -

[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];

但我的应用程序在第一步崩溃了.即启动后台线程.这不是在iOS中启动后台线程的方法吗?

更新1:之后[self performSelectorInBackground....我得到这个堆栈跟踪,没有资料什么那么-

在此输入图像描述

更新2:我甚至试过,开始这样的后台线程 - [NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];但我仍然得到相同的堆栈跟踪.

就这样我澄清一下,当我在主线程上执行此操作时,一切运行顺畅......

更新3这是我尝试从后台运行的方法

- (void)getResultSetFromDB:(NSMutableArray *)toProceessDocids
{
    SpotMain *mirror = [[SpotMain alloc] init];
    NSMutableArray *filteredDocids = toProceessDocids;

    if(![gMediaBucket isEqualToString:@""])
        filteredDocids = [mirror FetchDocIdsForMediaBucketWithDocID:filteredDocids mBucket:gMediaBucket numRes:-1];
    if(![gMediaType isEqualToString:@""])
        filteredDocids = [mirror FetchDocIdsForMediaType:filteredDocids mediaType:gMediaType numRes:-1];
    if(![gPlatform isEqualToString:@""])
        filteredDocids = [mirror FetchDocIdsForPlatformID:filteredDocids platformId:@"1" numRes:-1];

    self.resultSet = [mirror FetchObjectFromDocid:filteredDocids];
    [filteredDocids release];
    [mirror release];

    [self performSelectorOnMainThread:@selector(showResults) withObject:nil …
Run Code Online (Sandbox Code Playgroud)

multithreading objective-c core-foundation uikit ios

117
推荐指数
2
解决办法
17万
查看次数

Objective C 中 URL 的异步加载

我的应用程序将 URL 加载到.txt我的网络服务器上的文件。我\xe2\x80\x99m 收到此警告:

\n
\n

不应在此应用程序的主线程上同步 URL 加载 https://(我的文本文件的路径)/nowplaying.txt,因为这可能会导致 UI 无响应。请切换到异步网络 API,例如 URLSession。

\n
\n

我找不到任何示例来修改我的代码。Here\xe2\x80\x99s 我现在使用的\xe2\x80\x99m 生成了错误。

\n
- (void)viewDidLoad {\n    [super viewDidLoad];\n    NSString *stringURL = @"https://(path to my text file)/nowplaying.txt";\n    NSURL  *url = [NSURL URLWithString:stringURL];\n    NSData *urlData = [NSData dataWithContentsOfURL:url];\n    NSString *dataString = [NSString stringWithUTF8String:[urlData bytes]];\n    _lblNowPlaying.text = dataString;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

url asynchronous objective-c ios

2
推荐指数
1
解决办法
1284
查看次数