2012-01-08 2 views
0

У меня есть переменнаяКак перенести сильную переменную id в переменную UIImage?

@property (strong, nonatomic) id dataObject; 

Это указатель на UIImage. Я хочу отправить его в новую переменную.

@property (nonatomic, retain) UIImage *theImage; 

Когда я пытаюсь сделать это, приложение падает с этой ошибкой: unrecognized selector sent to instance 0x68423b0

Как отправить его в моей новой переменной? Заранее спасибо.

contentViewController.h:

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 
#import "pageAppViewController.h" 

@class pageAppViewController; 

@interface ViewController : UIViewController 

{ 
    NSArray *content; 
    UIImageView *theImageView; 
    UIImage *theImage; 
} 

@property (strong, nonatomic) IBOutlet UIImageView *theImageView; 
@property (strong, nonatomic) id dataObject; 
@property (nonatomic, retain) UIImage *theImage; 

@end 

contentViewController.m:

#import "ViewController.h" 
#import "pageAppViewController.h" 

@implementation ViewController 

@synthesize theImageView, dataObject; 
@synthesize theImage; 


- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    //this is the line that is causing the problems. 
    theImage = dataObject; 
    theImageView = [[UIImageView alloc] initWithImage: theImage]; 

    [self.view addSubview:theImageView]; 
} 
@end 
+0

попробуйте это theImage = (UIImage *) dataObject; – IPaPa

+0

Спасибо, но это не сработало. – ctw

ответ

0

Почему не просто установить его на UIImage вместо идентификатора в интерфейсе, Почему (ID)?

@property (strong, nonatomic) UIImage *dataObject; 

Являются ли изображения типа NSData?

+0

Я просто попробовал, и это все еще не сработало. dataObject получен из следующего кода. Это объектAtIndex из массива UIImages, называемого книгой. - (ViewController *) viewControllerAtIndex: (NSUInteger) индекс { ViewController * dataViewController = [[ViewController alloc] initWithNibName: @ "ViewController" bundle: nil]; dataViewController.dataObject = [self.book objectAtIndex: index]; return dataViewController; } – ctw

0

Если у вас есть собственность, определенный как id он сообщает компилятору, что он может быть объектом любого типа. Если теперь вы хотите присвоить этот объект известному типу, и вы уверены, что объект, стоящий за id, имеет тот же тип, который вы можете просто его отличить.

Пример

id someObject = [UIImage imageNamed:@"x.png"]; 

UIImage *myImage = (UIImage*) someObject; 
+0

Спасибо. У меня все еще есть одна проблема. SomeObject - это указатель на изображение, которое берется из массива изображений и изменений, когда пользователь меняет изображения. Поэтому я не могу установить его на одно изображение. Есть ли другой способ установить id someObject в UIImage? – ctw

+0

Я не уверен, что вы знаете это, но UIImage нельзя сохранить в NSArray. Вам нужно сохранить его как NSData. У UIImage есть метод: imageWithData: вы можете использовать для получения изображения из объекта NSData. –

+0

@HubertKunnemeyer, что не так. Вы можете добавить UIImages в NSArray и получить их позже без каких-либо проблем. Что заставляет вас думать, что сохранение UIImage в NSArray было бы недействительным? – Till

Смежные вопросы