У меня есть два класса, подкласс 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
ли я что-то пропустил?
Является ли 'theCanvas' тем же самым экземпляром, что фактически была сохранена в viewData? –
Должно быть. Переменная задана в drawRect: в исходном файле .m, поэтому она должна быть частью любого экземпляра. Кроме того, предполагается только один экземпляр этого конкретного представления. Тем не менее, я изучу его ... что-то лучше домашней работы (: – PopKernel
Я знаю, что у вас есть экземпляр, и он работает, но это не значит, что 'TheCanvas' указывает на экземпляр, с которым вы работаете. set 'self.viewData' do' NSLog (@ "% @", self); 'и затем посмотреть, является ли это тем же самым объектом, что и при NSW (@"% @ "theCanvas);' –