Objective c 尝试替换已弃用的loadnibnamed:owner
我正在尝试替换不推荐的Objective c 尝试替换已弃用的loadnibnamed:owner,objective-c,macos,cocoa,nsbundle,Objective C,Macos,Cocoa,Nsbundle,我正在尝试替换不推荐的 [NSBundle loadNibNamed:@"Subscriptions" owner:self]; 取而代之的是这个(我能找到的唯一等价物) 但是对话框会立即弹出并消失,而不是像处理不推荐的呼叫那样保持打开状态 这段代码位于这样的viewcontroller中 - (id)init{ self = [super init]; if (self) { //[NSBundle loadNibNamed:@"Subscriptions"
[NSBundle loadNibNamed:@"Subscriptions" owner:self];
取而代之的是这个(我能找到的唯一等价物)
但是对话框会立即弹出并消失,而不是像处理不推荐的呼叫那样保持打开状态
这段代码位于这样的viewcontroller中
- (id)init{
self = [super init];
if (self) {
//[NSBundle loadNibNamed:@"Subscriptions" owner:self];
[[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil];
}
return self;
SubscriptionsViewController *subscriptionsViewController = [[SubscriptionsViewController alloc] init];
[subscriptionsViewController.window makeKeyAndOrderFront:self];
}
我是这样从appdelegate调用它的
- (id)init{
self = [super init];
if (self) {
//[NSBundle loadNibNamed:@"Subscriptions" owner:self];
[[NSBundle mainBundle] loadNibNamed:@"Subscriptions" owner:self topLevelObjects:nil];
}
return self;
SubscriptionsViewController *subscriptionsViewController = [[SubscriptionsViewController alloc] init];
[subscriptionsViewController.window makeKeyAndOrderFront:self];
我有什么遗漏吗?对我来说,这似乎是直截了当的 对话框的出现和消失是对象可能被收集的标志-在强烈引用该对话框的情况下,它将被收集和丢失 不推荐使用的调用保留了nib中顶级对象的所有权,而新调用没有 因此,引用顶级对象的所有者对象的属性必须是强属性,否则需要保留顶级对象数组。这与旧的建议相反,在旧的建议中,此类属性很弱
引用nib中非顶级对象的属性仍然很弱。我在使用
loadNibNamed:owner:topLevelObjects:
时遇到了类似的问题,并且总是出现如下错误
[\uu NSArrayM insertObject:atIndex:]:对象不能为nil',终止时调用了NSException abort()类型的未捕获异常
因为我的顶层对象是零
我最终发现我正在加载的nib文件的Interface Builder版本设置为“Xcode 4.6”。当我将其设置为6.2时,一切又恢复正常
我也遇到了同样的问题,你找到解决方案了吗?那么,解决方案是什么呢?我有一个很好的解决方案,但它仍然存在hiding@Retro-听起来你有不同的问题,如果你有一个强引用,对象将不会被收集。问你自己的问题,给出你的代码的细节,哪里出了问题,你尝试了什么-然后有人可能会帮助你。