Почему я не могу загрузить перо в своем комплекте в статической библиотеке iPhone? - PullRequest
0 голосов
/ 21 августа 2010

Позвольте мне предварить это, сказав, что я очень необработанный разработчик iPhone.

Я создаю статическую библиотеку, которую можно использовать в приложениях для iPhone. Это должно показать представление, но статические библиотеки, насколько я понимаю, не могут включать nibs (или xibs, в моем случае). Итак, я создал отдельный пакет, содержащий XIB, который мне нужен. Затем я включаю пакет вместе со статической библиотекой в ​​приложение. Я хочу инициализировать класс, который расширяет UIViewController, используя рассматриваемый xib.

В моей библиотеке есть следующий код:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Mobtest" ofType:@"bundle"];
NSBundle *mobtestBundle = [NSBundle bundleWithPath:bundlePath];
NSLog([@"bundle path: " stringByAppendingString: [[NSBundle bundleWithPath:bundlePath] bundlePath]]);
sharedInstance = [[MTFeedbackViewController alloc] initWithNibName:@"MTFeedbackViewController" bundle:mobtestBundle];

Путь к пакету, выведенный NSLog, является правильным путем для пакета в скомпилированном приложении. К сожалению, я не могу инициализировать UIViewController и вместо этого получаю следующую ошибку:

2010-08-20 22:08:16.102 MobtestLibSampleApp[2332:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "MTFeedbackViewController"'

У кого-нибудь есть предложения, почему xib не может быть загружен? Возможно, что-то в этом связано неправильно? Есть ли место, где я могу получить дополнительную информацию об отладке?

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

Рассматривали ли вы отключение пера и просто построение своего представления в коде путем реализации -loadView в вашем контроллере представления?Если у вас мало представлений, и / или они не сложны, это будет проще для пользователей вашей библиотеки, поскольку им не придется беспокоиться о включении пакета вместе с вашей библиотекой.

В целях отладки вы можете переопределить -loadView в вашем контроллере представления и проверить self.nibName и self.nibBundle, чтобы убедиться, что ваш контроллер получает ресурсы, которые вы передаете. Просто не забудьте вызвать [super loadView], чтобыВаш кончик на самом деле загружается.(Обратите внимание, что если вы переопределяете loadView для построения вашего представления и устанавливаете свойство view вашего контроллера, вы должны не вызывать [super loadView].)

В документах говорится, что перо внутриваш пакет должен находиться в «dir specific project dir» или в подкаталоге «Resources».Дважды проверьте свою цель пакета в XCode, чтобы удостовериться, что Ваш наконечник копируется в правильное место (или подкаталог 'Projects' или 'Resources') в вашем комплекте.Также попробуйте проверить содержимое вашего пакета в методе loadView:

NSLog(@"nib path inside bundle: %@", [self.nibBundle pathForResource:@"MTFeedbackViewController" ofType:@"nib"]);
0 голосов
/ 21 августа 2010

Надеюсь, вы на самом деле имеете в виду перо.xibs - это сериализация XML для редактирования Interface Builder;они компилируются в xibs во время процесса сборки.Похоже, что перья iPhone представляют собой бинарный список (я не думаю, что бинарные списки существовали до 10.3, я не знаю, что было до этого)обратите внимание, что первый аргумент NSLog является строкой формата printf, так что вы вызываете неопределенное поведение, если ваш путь к пакету содержит%.

...