2010-12-04 2 views
2

Итак, у меня есть 2 объекта.copyWithZone, называемый

Library.h: 
    NSString *name; 
    Book *book; 

Book.h: 
    NSString *title 
    NSString *author; 

Свойства все настройки, как (чтение и запись, копирование)

ViewController.h: 
    Library *library; 
    Book *book; 

ViewController.m: 
    library = [[Library alloc] init]; 
    book = [[Book alloc]init]; 


    //The fallowing all works 
    library.name = @"Library Name"; 
    book.title = @"book Title"; 
    book.author = @"book author"; 

//The fallowing crashes my app 
library.book = book; 

Как можно инкапсулировать книги внутри объекта библиотеки?

Отладчик дает мне погрешность.

[библиотека copyWithZone]: непризнанный селектор

ответ

3

-copyWithZone: селектор вызывается, потому что вы присваиваете объект к свойству, помеченная как (копия). Помечая его как (копия), компилятор должен создать сеттер от вашего имени, который пытается сделать копию назначаемого объекта.

Вы должны либо пометить свои свойства как (readwrite, сохранить), чтобы сохранить существующий экземпляр книги вместо создания копии или вам необходимо реализовать протокол NSCopying для вашего класса Book. Вот документация от Apple на NSCopying:

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html%23//apple_ref/doc/uid/TP40003777

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

+0

Этому спасибо. – endy 2010-12-04 00:59:17

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