UIImage imageNamed

#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]];