Как работает [NSBundle loadNibNamed:owner:] в Xcode 3.1?

Я разрабатываю на более старом Mac. У меня нет доступа к более новым компьютерам Mac с Xcode 3.1, но я хочу убедиться, что мой исходный код будет работать на них. До сих пор это было довольно просто, все, что мне нужно сделать, это игнорировать все, что рядом с названием «устаревшее», но переход от NIB к XIB меня немного сбил с толку. То, что я прочитал, по-видимому, подразумевает, что XIB компилируются в NIB во время сборки Release, но, возможно, этого не происходит во время сборки Debug.

Что бы это сделало в Xcode 3.1?

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])
{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 [NSApplication sharedApplication];

 [NSBundle loadNibNamed:@"MainMenu" owner: NSApp];
 [[NSApp mainMenu] removeItem: [[NSApp mainMenu]itemWithTitle: @"File"]]; 

 [pool release];
 [NSApp run];
 return NSApplicationMain(argc,  (const char **) argv);
}

Ошибка в отладке, потому что MainMenu.nib не существует? Или XIB превращаются в NIB каждый раз, когда приложение компилируется, точка, и мне не нужно ни о чем беспокоиться?


person user512530    schedule 18.11.2010    source источник
comment
Он работает так же, как и в любой другой среде разработки. Это метод Cocoa, а не функция Xcode IDE. Cocoa, в конечном счете, является частью операционной системы, так о какой версии ОС вы спрашиваете?   -  person Peter Hosey    schedule 19.11.2010


Ответы (1)


XIB всегда компилируются в NIB для использования во время выполнения. XIB — это просто формат хранения на основе XML. NIB, созданные путем компиляции XIB, не содержат информации, необходимой для редактирования файла NIB: XIB компилируется в NIB только для чтения. Это никак не влияет на то, как ваше приложение их использует: с точки зрения NIB это NIB это NIB.

person Jeremy W. Sherman    schedule 18.11.2010
comment
Превосходно! Это действительно хорошо знать. Я постоянно встречал людей, говорящих, что XIB будут скомпилированы в NIB во время развертывания приложения, что, как я понял, возможно, имело в виду только во время сборок Release. Спасибо за решение моего, честно говоря, довольно жалкого вопроса. - person user512530; 19.11.2010