Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray removeObjectAtIndex和NSTabView_Objective C_Macos_Webview_Nsmutablearray_Nstabview - Fatal编程技术网

Objective c NSMutableArray removeObjectAtIndex和NSTabView

Objective c NSMutableArray removeObjectAtIndex和NSTabView,objective-c,macos,webview,nsmutablearray,nstabview,Objective C,Macos,Webview,Nsmutablearray,Nstabview,我的程序是带有MMTabBarView的web浏览器。 关闭选项卡的问题通过查看日志来关闭无效元素调用时[browserViews removeObjectAtIndex:index] 代码如下: h m 和日志: 程序将加载默认选项卡google.com: 2015-03-26 17:51:57.634 ERClient[89171:26065490]未选择选项卡视图项 索引0 2015-03-26 17:51:59.030电子客户[89171:26065490](电子浏览器: 0x60000

我的程序是带有MMTabBarView的web浏览器。 关闭选项卡的问题通过查看日志来关闭无效元素调用时
[browserViews removeObjectAtIndex:index]
代码如下:
h

m

和日志: 程序将加载默认选项卡google.com:

2015-03-26 17:51:57.634 ERClient[89171:26065490]未选择选项卡视图项 索引0

2015-03-26 17:51:59.030电子客户[89171:26065490](电子浏览器: 0x600000124060)

2015-03-26 17:52:02.278电子客户[89171:26065490]确实收到了标题

Gmail在新选项卡中打开:

2015-03-26 17:53:51.994电子客户[89171:26065490] createWebViewWithRequest

2015-03-26 17:53:51.995 eClient[89171:26065490]未选择选项卡视图项 指标1

2015-03-26 17:53:52.035电子客户[89171:26065490](电子浏览器: 0x600000124060,ERBrowser:0x6000001CC0)

2015-03-26 17:53:53.987客户[89171:26065490]确实收到了标题

2015-03-26 17:53:56.451电子客户[89171:26065490]确实收到了标题

2015-03-26 17:53:59.003客户[89171:26065490]确实收到了标题- 我不明白为什么这种情况会发生3次而不是2次

关注索引为1的选项卡2,我将焦点更改为第一个选项卡索引0,然后返回:

2015-03-26 17:57:56.384电子客户端[89171:26065490]未选择选项卡视图项 索引0

2015-03-26 17:57:56.477电子客户[89171:26065490]索引变更焦点 表0

2015-03-26 17:57:58.206电子客户端[89171:26065490]未选择选项卡视图项 指标1

2015-03-26 17:57:58.207电子客户[89171:26065490]索引变更焦点 表1

现在我用索引1关闭选项卡2:

2015-03-26 17:58:55.691电子客户[89171:26065490]将关闭选项卡视图项 指标1

2015-03-26 17:58:55.691电子客户[89171:26065490](电子浏览器: 0x600000124060)1

2015-03-26 17:58:55.692电子客户端[89171:26065490]未选择选项卡视图项 索引0

2015-03-26 17:58:55.693电子客户[89171:26065490]索引变更焦点 表0

结果表明,使用有效标题打开选项卡1,但内容仍保留在选项卡2上:

如果我打开另一个标签,也会显示gmail
告诉我如何修复它,或者在哪里阅读发生这种情况的原因,问题本身就解决了。 这个问题是因为我在编程方面有点经验。 现在我将描述为什么不工作。 当您从NSMutableArray中删除一个对象时,该对象仍然保留在加载页面的WebView对象中。有必要添加
[browserView removeFromSuperview]

代码如下:

- (void)tabView:(NSTabView *)aTabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem
{
    NSUInteger index = [aTabView indexOfTabViewItem:[tabView selectedTabViewItem]];
   if ([browserViews count] > index)
   {
       ERBrowser *browserView = browserViews[index];
       [browserViews removeObjectAtIndex:index];
       [browserView removeFromSuperview];
   }
}

也许将来有人会用Tab Bar创建一个Web浏览器。此外,您应该根据文档调用super方法:

/* Implemented methods from NSTabViewDelegate. These require a call to super if overriden by a subclass. */
- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;
- (void)tabView:(NSTabView *)aTabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem
{
    NSUInteger index = [aTabView indexOfTabViewItem:[tabView selectedTabViewItem]];
   if ([browserViews count] > index)
   {
       ERBrowser *browserView = browserViews[index];
       [browserViews removeObjectAtIndex:index];
       [browserView removeFromSuperview];
   }
}
/* Implemented methods from NSTabViewDelegate. These require a call to super if overriden by a subclass. */
- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(nullable NSTabViewItem *)tabViewItem NS_REQUIRES_SUPER;