NSTableView доступен для osx 10.0, но NsTableViewDataSource доступен только для 10.6? - PullRequest
2 голосов
/ 27 января 2010

Я просматривал документы для NSTableViewDataSource, и они говорят, что этот протокол доступен только на OSX 10.6. Как это может быть? Разве NSTableViewDataSource не является объектом, который содержит все данные для вашего NsTableView?

Ответы [ 3 ]

4 голосов
/ 27 января 2010

Чтобы добавить то, что написал @Zydeco, @protocol s в Objective-C не имели атрибутов @optional до 10.5.Таким образом, Apple не смогла использовать @protocol для определения методов делегатов, поскольку объекты делегатов решили реализовать только часть методов делегатов.В те времена Apple использовала так называемый неформальный протокол, который был просто категорией NSObject.

Теперь, когда они представили способ пометить некоторые методы как @optional в @protocol, они решили сделать каждый делегат формальным протоколом в 10.6.Таким образом, может быть больше проверки во время компиляции.Но функциональность не изменилась.

См. Официальную документацию по протоколам для получения дополнительной информации.

3 голосов
/ 27 января 2010

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

1 голос
/ 27 января 2010

В 10.6 Apple формализовала многие неофициальные протоколы делегатов и источников данных. Таким образом, неофициальный протокол, такой как

@interface NSObject (MyViewDataSource)

// data source methods

@end

стал

@protocol MyViewDataSource
//data source methods
@end

Преимущество заключается в том, что компилятор может выполнить некоторую проверку во время компиляции, чтобы предупредить вас, если вы передадите несовместимый экземпляр (т.е. не реализует NSTableViewDataSource в качестве источника данных, например, NSTableView и может вы, если вы не реализуете все необходимые методы протокола после объявления, что класс реализует протокол в его @interface.

@protocol(NSTableViewDataSource) не существовал до 10.6, поэтому вам придется объявить его, если вы хотите скомпилировать с SDK для предыдущих версий. Вы можете сделать это и передать свой объект источника данных (который теперь реализует фиктивный протокол) в качестве источника данных в предыдущих SDK, поскольку он также обязательно соответствует неофициальному протоколу, определенному в этих предыдущих версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...