Как я создаю тип документа только для импорта в Какао?

Когда вы не используете обобщенный компилятор, он обрабатывает его как необработанный тип, и, следовательно, каждый универсальный тип становится Object, и поэтому вы не можете передать String[], так как ему нужно Object[]
. deal - если вы используете

List l = new ArrayList<String>();

Вы используете raw type, и все его элементы экземпляра заменяются его аналогами стирания. В частности каждый параметризованный тип, появляющийся в объявлении метода экземпляра, заменяется его необработанным аналогом. Подробнее см. JLS 4.8.

6
задан Sijmen Mulder 11 June 2009 в 06:33
поделиться

2 ответа

Я не верю, что функция импорта поддерживается по умолчанию в Какао. Когда пользователь нажимает кнопку «Открыть» на открытой панели, платформа вызывает openDocumentWithContentsOfURL: display: error: на NSDocumentController . Здесь система документов определяет, какой тип файла вы открываете, и консультируется с файлом Info.plist, чтобы выяснить, какой подкласс NSDocument использовать для открытия документа.

Вы можете создать подкласс NSDocumentController и переопределите openDocumentWithContentsOfURL: display: error: метод для перехвата типов файлов, которые следует импортировать, а не открывать. В подклассе NSDocument напишите новый инициализатор с именем вроде initWithImportedContentsOfURL: type: error: (или что-нибудь с лучшим именем :-)), чтобы создать новый документ без названия и прочитать в содержимом импортированного файла.

1
ответ дан 8 December 2019 в 13:01
поделиться

Алекс, спасибо за ваш ответ, но я нашел способ, который мне нравится немного больше:

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName
               error:(NSError **)outError
{
    *outError = nil;
    if ([typeName isEqualToString:@"SomeReadOnlyType"])
    {
        // .. (load data here)
        [self setFileURL:nil];

        return result;
    }
    else
    {
        // .. (do whatever you do for other documents here)
    }
}

Таким образом, все еще можно использовать систему документов, предоставляемую Какао, вместо того, чтобы использовать мою собственную .

Я также задокументировал решение здесь: http://www.cocoadev.com/index.pl?CFBundleTypeRole немного ниже по странице.

4
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: