UIImage с URL (карты Google) - PullRequest
0 голосов
/ 13 марта 2012

Привет. Я пытаюсь получить изображение с maps.googleapis.com. Ниже приведен мой код по некоторым причинам, мой URL-адрес продолжает возвращаться как ноль. Я делаю что-то неправильно?

NString *imageSourceString = @"https://maps.googleapis.com/maps/api/staticmap?  markers=%2212547%20Hardy%20St,Overland%20Park,Kansas%22&zoom=14&size=576x640&maptype=hybrid& sensor=false";

UIImage* finalBitmap = [UIImage imageNamed:imageSourceString];

if( nil == finalBitmap )
{
    // Next, try resolving the image using the string as the file name
    finalBitmap = [UIImage imageWithContentsOfFile:imageSourceString];

    if( nil == finalBitmap )
    {
        // Next, try resolving the string as a URL.

        NSURL* url = [NSURL URLWithString:imageSourceString];
        if( nil != url ) //url is nil at this point
        {
            NSData* data = [NSData dataWithContentsOfURL:url];
            if( nil != data )
            {
                finalBitmap = [UIImage imageWithData:data];
            }
            else
            {
                finalBitmap = nil;
            }
        }
        else
        {
            finalBitmap = nil;
        }

    }
}

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Это прекрасно работает:

NSString *stringURL = @"http://www.yoururl.com";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];
[imageData release];

Ваша ошибка в том, что

UIImage* finalBitmap = [UIImage imageNamed:imageSourceString];

не может получить изображение с удаленного URL, поэтому это

if( nil == finalBitmap )

получит всегда ноль.

Проверьте также, правильно ли сервер возвращает изображение.

2 голосов
/ 13 марта 2012

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

Во-первых, это NSString, а не NString.

Во-вторых, imageWithContentsOfFile в imageSourceString завершится ошибкой, потому что вы дали ему URL, а не имя файла. Вы можете указать ему URL файла, но это не то, что здесь происходит.

В-третьих, не используйте dataWithContentsOfURL в реальном приложении - оно заморозит пользовательский интерфейс и, возможно, приведет к сбою приложения, если сервер на другом конце будет слишком медленным. Используйте асинхронную сеть. На эту тему есть отличная серия видеороликов WWDC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...