Не должно быть проблем с использованием одного и того же файла NIB для нескольких контроллеров, когда каждый из них инициализируется с помощью initWithNibName: bundle :. Обычно вы не загружаете собственный файл пера контроллера изнутри контроллера.
Если вы загрузите nib-файл, используя loadNibNamed :::, вы получите NSArray с определенными в нем объектами, поэтому вы не сможете использовать его как представление напрямую. Один из способов получить представление - это поиск по массиву с помощью for () или чего-то другого, чтобы найти нужный объект, но если вы установили владельца: self, то он должен подключаться к выходам, связанным с владельцем файла самостоятельно, так как владельцем файла будет сам , Но вы можете отказаться от возвращаемого значения в этом случае; вам не нужен возвращаемый массив. Это может быть вашей основной проблемой (засорение розетки массивом), если у вас есть розетка.
Можно использовать loadNibNamed для загрузки определенного объекта представления (при условии, что вы выбрали его из возвращаемого массива), а затем каким-то образом отобразить его, но обычно проще использовать initWithNibName на контроллере (в этом случае владельцем файла будет контроллер).
О, и вы также можете установить файл пера для контроллера в Интерфейсном Разработчике. Не должно быть проблем с использованием одного и того же пера для нескольких контроллеров, поскольку по сути вы просто скажете Интерфейсному Разработчику настроить файл пера для выполнения чего-то вроде initWithNibNamed. Щелкните на объекте контроллера и проверьте окно инспектора.
Обновление
Я бы, вероятно, сделал это, чтобы использовать только одно представление в нескольких контроллерах:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FooView"
owner:self options:nil];
for (id obj in nib)
if ([obj isKindOfClass:[FooView class]])
myNewView = (FooView *)obj;
(Украдено из главы 8: Ячейки 2 в образце кода из Начало разработки iPhone 3 .)
Вы могли бы сделать это с выходами в IB, и в этом случае вы могли бы пропустить цикл for, но вам, вероятно, понадобится суперкласс для обоих контроллеров, объявляющих выход, и что-то, чтобы сообщить Interface Builder, что Владелец файла является экземпляром этого суперкласса, чтобы он знал о выходе. Вероятно, не стоит хлопот.