2015-06-15 1 views
0

Я извлекаю NSData с URL-адреса, затем я пытаюсь установить его на изображение. В консоли он возвращает null, однако, когда я запрашиваю данные и снова устанавливаю изображение , изображение, чем загружает?UIImage возвращает null первый раз, до перезагрузки?

Зачем это нужно сделать дважды для его загрузки?

Это два метода, которые я использую для получения изображения.

-(void)getUserPicture { 
//Grab and upload user profile picture 
imageData = [[NSMutableData alloc] init]; // the image will be loaded in here 
NSString *urlString = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", userId]; 
NSMutableURLRequest *urlRequest = 
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] 
         cachePolicy:NSURLRequestUseProtocolCachePolicy 
        timeoutInterval:3]; 

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest 
                   delegate:self]; 
if (!urlConnection) NSLog(@"Failed to download picture"); 
} 



-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    userPicture = [UIImage imageWithData:data]; 
    NSLog(@"%@",userPicture); //returns null in console first time, until reloaded??? 
} 

ответ

0

connection:didReceiveData: метод вызывается повторно, так как данные загружаются постепенно. Вероятно, вам нужен метод connectionDidFinishLoading:.

Кстати, вам все равно понадобится connection:didReceiveData:, но вместо того, чтобы пытаться создать изображение, вы просто добавляете новые данные в буфер. Затем в методе connectionDidFinishLoading: вы берете буфер и создаете свое изображение.

Пример кода, но, пожалуйста, добавьте обработку ошибок при необходимости:

@property (strong, nonatomic) NSMutableData *data; 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    self.data = [NSMutableData data]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [self.data appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    self.userPicture = [UIImage imageWithData:self.data]; 
} 
+0

Я подумал о том, что, но как я могу получить 'NSData' от этого метода? его доступно только в 'connection: didReceiveData:' правильно? – Josh

+0

Я реализовал ваши методы, но я также добавил в 'NSLog' в' connectionDidFinishLoading', и он мгновенно возвращает nil при запуске? Почему это происходит? – Josh