#iphone
#iPhone
Вопрос:
Я пытаюсь использовать URL в качестве UIImage
в OpenFlow API.
NSString *imageUrl = [[[newsEntries objectAtIndex:0] objectForKey: @"still"] retain];
NSURL *url2 = [NSURL URLWithString:imageUrl];
NSData *photoData = [NSData dataWithContentsOfURL:url2];
UIImage *imageUI = [UIImage imageWithData:photoData]
UIImageView *myImage = [UIImageView initWithFrame:imageUI];
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:myImage]];
[imageUr release];
[(AFOpenFlowView *)self.view setNumberOfImages:3];
Я пробовал это так, но безуспешно. Единственным способом, которым я заставил этот API работать, было использование imageNamed
типа. initwithData
Не имеет успеха.
Итак, как я могу изменить это, NSString
чтобы это, наконец, стало imageNamed
методом?
Ответ №1:
UIImageView отличается от UIImage.
Измените эту строку: [(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:myImage]];
К этому: [(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageUI]];
и это должно сработать.
Ответ №2:
Здесь у вас есть несколько существенных ошибок. Похоже, вам может понадобиться прочитать о C / Objective-C и типах.
Звучит так, как будто вы утверждаете, что, в частности, строка
UIImage *imageUI = [UIImage imageWithData:photoData]
не работает. Код до этого момента на самом деле выглядит нормально (хотя нет необходимости сохранять, а затем освобождать imageUrl
переменную.
После того, как вы создали свой UIImage
, вы должны быть в состоянии передать его непосредственно на свой AFOpenFlowView
:
[(AFOpenFlowView*)self.view setImage:imageUI forIndex:0];
Строка
UIImageView *myImage = [UIImageView initWithFrame:imageUI];
содержит две ошибки (и в любом случае не нужен). Во-первых, в качестве аргумента -initWithFrame
принимает a CGRect
, а не a UIImage
. UIImageView
действительно имеет метод инициализации -initWithImage
, который, вероятно, является тем, что вы предполагали. Но в любом случае методы, начинающиеся с «init», являются методами экземпляра, а не методами класса, поэтому вы должны вызывать их в реальных экземплярах UIImageView
, вот так:
UIImageView *myImage = [[UIImageView alloc] initWithImage:imageUI];
Обратите внимание, что это приведет к утечке памяти, если вы не выполните автоматическое освобождение.
В следующей строке вы правильно пытаетесь присвоить a UIImage
своему AFOpenFlowView
, но вы пытаетесь создать это UIImage
путем передачи a UIImageView
в imageNamed
метод. imageNamed
принимает NSString, который содержит имя изображения, и передача ему чего-либо еще не сработает.
Вы всегда должны быть в курсе того, какой объект ожидает получить метод, и убедитесь, что вы нашли какой-то способ предоставить ему такие вещи.
Вероятно, то, что вы ищете здесь, выглядит примерно так:
NSString *imageUrl = [[newsEntries objectAtIndex:0] objectForKey: @"still"];
NSString *imageName = [imageUrl lastPathComponent];
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName]];