В моем случае мне нужно было вручную удалить все ссылки на dll, которые начинались с System.IO.Compression , а затем добавить одну за другой нужные ( System.IO .Compression.FileSystem и т. Д.), Хотя я написал только одно выражение using
using System.IO.Compression;
. Надеюсь, это кому-нибудь поможет
Да.
Однако есть один аспект, который все еще оставляет меня в недоумении: как правильно моделировать отношения со многими, особенно когда коллекция должна быть публично неизменной, но изменяемой в частном порядке….
Легко: объявите свойство как только для чтения
в заголовке, затем повторно объявите его как readwrite, скопируйте
в расширение класса в файле реализации.
] Я понимаю, как реализовать методы доступа KVC для отношений ко многим (
countOf
,objectsIn
и т. Д.), И это маршрут I » Я до сих пор следил.AtIndex
Есть и мутации. С ними вам не нужно использовать mutableArrayValueForKey:
; вместо этого вы можете напрямую использовать изменяющиеся методы доступа. Вы' Я по-прежнему буду получать уведомления KVO, потому что KVO обертывает эти методы в первый раз, когда что-то добавляет себя в качестве наблюдателя для свойства.
У меня есть список форматов селекторов средств доступа , включая изменяемые средства доступа, на моем blog.
Edit:
Даже когда я объявляю свойство to-many как readonly, как в приведенном выше примере, внешний код все еще может вызывать
mutableArrayValueForKey: @ "transaction"
для объекта модели и изменить коллекцию.
Это хорошая причина сделать привычкой использовать изменяющие методы доступа и избегать mutableArrayValueForKey:
. Вы не будете отправлять сообщения о мутации извне класса, если получите предупреждение компилятора (нет такого [общедоступного] метода) каждый раз, когда попробуете его.
Несмотря на доступность mutableArrayValueForKey: