Для полученной ошибки это означает, что публичный IP не может быть найден в resourcegroup1
с тем же регионом, что и AKS. Другой регион вызывает ошибку, подобную вашей:
Таким образом, вы должны создать публичный IP в том же регионе с вашим AKS. Тогда это будет работать для вас.
Всем спасибо. Я нашел способ сделать то, что хотел.
UIView
с помощью IBOutlet
, которые вам нужны. UIViewController
(нет настраиваемого подкласса, но есть «настоящий»). Представление владельца файла связано с основным представлением, и его класс объявлен как один из шага 1). IBOutlet
s. DynamicViewController
] может запустить свою логику, чтобы решить, какое представление / xib загружать. После принятия решения в методе loadView
введите что-то вроде этого:
NSArray * nibViews = [[NSBundle mainBundle] loadNibNamed: @ "QPickOneView"
Владелец: самостоятельно
Варианты: ноль];
QPickOneView * myView = [nibViews objectAtIndex: 1];
myView.question = вопрос;
Вот и все!
Метод основного пакета loadNibNamed
позаботится об инициализации представления и создании соединений.
Теперь ViewController может отображать представление или другое в зависимости от данных в памяти , и "родительскому" экрану не нужно беспокоиться об этой логике.
Вы не должны устанавливать класс вашего контроллера представления как подкласс UIView
в Интерфейсном Разработчике. Это определенно, по крайней мере, часть вашей проблемы. Оставьте это либо UIViewController
, либо его подкласс, либо какой-либо другой собственный класс, который у вас есть.
Что касается загрузки только представления из xib, я предполагал, что вы использовали , чтобы иметь какой-то контроллер представления (даже если он не расширяет UIViewController
, который может быть слишком тяжелым для ваших нужд), установленным в качестве владельца файла в Interface Builder, если вы хотите использовать его для определения ваш интерфейс. Я провел небольшое исследование, чтобы подтвердить это. Это связано с тем, что в противном случае не было бы возможности получить доступ ни к одному из элементов интерфейса в UIView
, и не было бы способа, чтобы ваши собственные методы в коде запускались событиями.
Если вы используете UIViewController
в качестве владельца вашего файла для ваших представлений, вы можете просто использовать initWithNibName: bundle :
, чтобы загрузить его и вернуть объект контроллера представления. В IB убедитесь, что вы установили выход view
на представление с вашим интерфейсом в xib. Если вы используете какой-либо другой тип объекта в качестве владельца вашего файла, вам нужно будет использовать метод NSBundle
loadNibNamed: owner: options:
для загрузки пера, передавая экземпляр Владелец файла метода. Все его свойства будут правильно настроены в соответствии с выходами, которые вы определите в IB.
initWithNibName: bundle:
, чтобы загрузить его и получить обратно объект контроллера представления. В IB убедитесь, что вы установили выход view
на представление с вашим интерфейсом в xib. Если вы используете какой-либо другой тип объекта в качестве владельца вашего файла, вам нужно будет использовать метод NSBundle
loadNibNamed: owner: options:
для загрузки пера, передавая экземпляр Владелец файла метода. Все его свойства будут правильно настроены в соответствии с выходами, которые вы определите в IB. s Владелец ваших представлений, вы можете просто использовать initWithNibName: bundle:
, чтобы загрузить его и получить обратно объект контроллера представления. В IB убедитесь, что вы установили выход view
на представление с вашим интерфейсом в xib. Если вы используете какой-либо другой тип объекта в качестве владельца вашего файла, вам нужно будет использовать метод NSBundle
loadNibNamed: owner: options:
для загрузки пера, передавая экземпляр Владелец файла метода. Все его свойства будут правильно настроены в соответствии с выходами, которые вы определите в IB. Если вы используете какой-либо другой тип объекта в качестве владельца вашего файла, вам нужно будет использовать метод NSBundle
loadNibNamed: owner: options:
для загрузки пера, передавая экземпляр Владелец файла метода. Все его свойства будут правильно настроены в соответствии с выходами, которые вы определите в IB. Если вы используете какой-либо другой тип объекта в качестве владельца вашего файла, вам нужно будет использовать метод NSBundle
loadNibNamed: owner: options:
для загрузки пера, передавая экземпляр Владелец файла метода. Все его свойства будут правильно настроены в соответствии с выходами, которые вы определите в IB. В предыдущем ответе не учитывались изменения в структуре NIB (XIB), произошедшие между версиями 2.0 и 2.1 iPhone SDK. Пользовательское содержимое теперь начинается с индекса 0 вместо 1.
Вы можете использовать макрос 2.1, который действителен для всех версий 2.1 и выше (это два символа подчеркивания перед IPHONE:
// Cited from previous example
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"QPickOneView" owner:self options:nil];
int startIndex;
#ifdef __IPHONE_2_1
startIndex = 0;
#else
startIndex = 1;
#endif
QPickOneView* myView = [ nibViews objectAtIndex: startIndex];
myView.question = question;
Мы используем технику, аналогичную этой, для большинства наших приложения.
Барни
Я нашел эту запись в блоге Аарона Хиллегасса (автора, инструктора, ниндзя Cocoa) очень познавательной. Даже если вы не примете его модифицированный подход к загрузке файлов NIB через назначенный инициализатор, вы, вероятно, по крайней мере, получите лучшее понимание происходящего процесса. В последнее время я использую этот метод с большим успехом!
Я тоже хотел сделать что-то подобное, вот что я нашел: (SDK 3.1.3)
У меня есть контроллер представления A (сам принадлежит контроллеру Nav), который загружает VC B на нажатие кнопки:
В AViewController.m
BViewController *bController = [[BViewController alloc] initWithNibName:@"Bnib" bundle:nil];
[self.navigationController pushViewController:bController animated:YES];
[bController release];
Теперь VC B имеет свой интерфейс из Bnib, но при нажатии кнопки я хочу перейти в «режим редактирования», который имеет отдельный пользовательский интерфейс от другого пера, но мне не нужен новый VC для режима редактирования, я хочу, чтобы новый наконечник был связан с моим существующим B VC.
Итак, в BViewController.m (в методе нажатия кнопки)
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"EditMode" owner:self options:nil];
UIView *theEditView = [nibObjects objectAtIndex:0];
self.editView = theEditView;
[self.view addSubview:theEditView];
Затем нажмите другую кнопку (для выхода из режима редактирования):
[editView removeFromSuperview];
и я вернусь к своему исходному Bnib.
Это работает нормально, но обратите внимание, что в моем EditMode.nib есть только один объект верхнего уровня, объект UIView. Не имеет значения, установлен ли в этом пере Владелец файла как BViewController или по умолчанию NSObject, НО убедитесь, что для View Outlet у владельца файла НЕ установлено какое-либо значение. Если это так, я получаю сбой exc_bad_access, и xcode продолжает загружать 6677 кадров стека , показывая внутренний UIView метод многократно вызывается ... так что выглядит как бесконечный цикл. (Однако View Outlet установлен в моем исходном Bnib)
Надеюсь, это поможет.
Я не уверен, о чем говорят некоторые ответы, но мне нужно поместить этот ответ здесь для следующего поиска в Google. Ключевые слова: "Как загрузить UIView из nib" или "Как загрузить UIView из NSBundle. "
Вот код почти на 100% прямо из книги Apress Beginning iPhone 3 (страница 247, "Using The New Table View Cell"):
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"Blah"
owner:self options:nil];
Blah *blah;
for (id object in bundle) {
if ([object isKindOfClass:[Blah class]]) {
blah = (Blah *)object;
break;
}
}
assert(blah != nil && "blah can't be nil");
[self.view addSubview: blah];
}
Это предполагает, что у вас есть подкласс UIView
под названием Blah
, перо под названием Blah
, которое содержит UIView
, класс которого установлен на Blah
.
#import "NSObject+LoadFromNib.h"
@implementation NSObject (LoadFromNib)
+ (id)loadFromNib:(NSString *)name classToLoad:(Class)classToLoad {
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:name owner:self options:nil];
for (id object in bundle) {
if ([object isKindOfClass:classToLoad]) {
return object;
}
}
return nil;
}
@end
extension UIView {
class func loadFromNib<T>(withName nibName: String) -> T? {
let nib = UINib.init(nibName: nibName, bundle: nil)
let nibObjects = nib.instantiate(withOwner: nil, options: nil)
for object in nibObjects {
if let result = object as? T {
return result
}
}
return nil
}
}
И пример использования:
class SomeView: UIView {
class func loadFromNib() -> SomeView? {
return self.loadFromNib(withName: "SomeView")
}
}