Ada*_*dam 1 objective-c nsurlconnection nsrunloop
我正在尝试从名为connect的方法中获取URL的内容.它读取其配置设置并尝试获取URL.它似乎需要运行循环来执行.我虽然只执行一次并完成.似乎除了每次获取此URL时,无论何时调用connect,我都不需要运行该循环.有没有更好的方法呢?
- (BOOL) connect
{
// read serverName and eventId from preferences
NSMutableArray* preferences;
preferences = [NSMutableDictionary dictionaryWithContentsOfFile:@"/tmp/wt.plist"];
// if these values aren't nil or blank
if ([preferences valueForKey:@"serverAddress"] && [preferences valueForKey:@"eventId"]) {
[self setServerAddress:@"172.16.28.210"];
[self setEventId:@"OT-3037009"];
} else{
// return some kind of error message
}
NSLog(@"VideoDataURL: %@", [self getVideoDataURL]);
// grab the URL and query the server
NSURL *myURL = [NSURL URLWithString:@"http://localhost"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:2];
__unused NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[[NSRunLoop currentRunLoop] run];
return TRUE;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// This method is called when the server has determined that it
// has enough information to create the NSURLResponse.
// It can be called multiple times, for example in the case of a
// redirect, so each time we reset the data.
// receivedData is an instance variable declared elsewhere.
[incomingData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
/*
* Called each time a chunk of data arrives
*/
NSLog(@"received %lu bytes", [data length]);
// Create a mutable data if it doesn't already exist
if (!incomingData) {
incomingData = [[NSMutableData alloc] init];
}
[incomingData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
/*
* Called if the connection fails
*/
NSLog(@"connection failed: %@", [error localizedDescription]);
incomingData = nil;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
/*
* Called when the last chunk has been processed
*/
NSLog(@"Got it all!");
NSString *string = [[NSString alloc] initWithData:incomingData encoding: NSUTF8StringEncoding];
incomingData = nil;
NSLog(@"response is: %@", string);
}
Run Code Online (Sandbox Code Playgroud)
Ash*_*row 10
如果你从主线程开始连接,是的,这是正确的.我只是使用GCD在主线程上创建并启动连接,以避免考虑运行循环.
dispatch_async(dispatch_get_main_queue(), ^{
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[conn start];
});
Run Code Online (Sandbox Code Playgroud)
从任何地方工作,您不必跟踪运行循环或线程.
| 归档时间: |
|
| 查看次数: |
4646 次 |
| 最近记录: |