2014-02-17 3 views
0

У меня есть два класса, подкласс NSDocument (класс A) и подкласс NSView (класс B). В моем подклассе NSView, после завершения чертежа, я сохраняю представление в NSData. В класса B DrawRect:Свойство nil при доступе из другого класса?

self.viewData = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:[self bounds]]TIFFRepresentation]; 

Установка контрольной точки на следующей строке показывает значение:

_viewData OS_dispatch_data * 1003522 bytes 0x0000618000069cc0 

Однако в dataOfType: ошибка: в классе А, следующая строка: (заметим, что класс B назван theCanvas здесь)

return [[[NSBitmapImageRep alloc]initWithData:[theCanvas viewData]]representationUsingType:NSPNGFileType properties:nil]; 

приводит к ошибке:

ImageIO: CGImageSourceCreateWithData data parameter is nil

И точка останова в этом методе показывает, что ViewData равна нулю:

_viewData NSData * nil 0x0000000000000000 

ли я что-то пропустил?

+0

Является ли 'theCanvas' тем же самым экземпляром, что фактически была сохранена в viewData? –

+0

Должно быть. Переменная задана в drawRect: в исходном файле .m, поэтому она должна быть частью любого экземпляра. Кроме того, предполагается только один экземпляр этого конкретного представления. Тем не менее, я изучу его ... что-то лучше домашней работы (: – PopKernel

+1

Я знаю, что у вас есть экземпляр, и он работает, но это не значит, что 'TheCanvas' указывает на экземпляр, с которым вы работаете. set 'self.viewData' do' NSLog (@ "% @", self); 'и затем посмотреть, является ли это тем же самым объектом, что и при NSW (@"% @ "theCanvas);' –

ответ

0

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

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