IB - 无法为视图控制器指定类

12
我是一个相当新的IOS开发者,我在这里遇到了一个之前没有遇到过的问题。以下是我的情况:
我创建了一个项目,添加了一些附加到它们自己的类的ViewControllers。但现在,我只是在storyboard中添加了一个新的ViewController。然后我创建了一个新的Objective-C类(它是UIViewController的子类)。问题是,在IB中,我无法将ViewController链接到新创建的类,因为我在IB提供的列表中根本没有这个类(请参见下面的图像)。我的新类被称为MapShownViewController,但是如您在图像上看到的,它不可用。

enter image description here

我之前用它处理其他课程都很好用,但对于这门课不起作用。

以下是MapShownViewController.h文件:

#import <UIKit/UIKit.h>

@interface MapShownViewController : UIViewController

@end

而 MapShownViewController.m 文件:

#import "MapShownViewController.h"

@interface MapShownViewController ()

@end

@implementation MapShownViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

有人能解释一下我错在哪了吗?


3
“Map”是视图控制器的一个糟糕的名称 - 现在像您列表中的MapViewController看起来不错。 - Paul.s
这只是个例子,但无论如何还是谢谢你的提示! - BMN
请问您能否添加map.h的代码? - meronix
@meronix 目前里面什么都没有,只有在创建文件时自动生成的默认代码。 - BMN
@Paul.s 我已经在帖子中更改了它,以适应我在项目中拥有的内容。 - BMN
显示剩余2条评论
9个回答

25
我曾经遇到过这个问题,让我非常困扰。我在将XCode从4.1升级到4.4后第一次注意到了它。我有一个已经在旧版XCode上工作的现有项目,并继续在4.4上工作。我和你一样,在story board中创建了一个新视图,然后创建了子类文件,但是该类在IB的自定义类下拉菜单中根本没有出现。经过大量搜索和挫败,最终我被迫退出Xcode(完全退出,而不仅仅是关闭),然后重新启动它。然后就像魔术一样,一切都开始正常工作了,新的类立即出现在IB的自定义类下拉菜单中。

太好了,很高兴你解决了问题!我知道这听起来有点像“IT呼叫中心”的回答(关闭应用程序并重新启动),但这是我能找到的唯一一种可以始终解决特定问题的方法。如果有人能够为此提供更多的价值和原因,那就随意分享,但在这之前,这就是我的解决方案。 - ross_t
这对我不起作用。我尝试过4.3.3和4.6.2。在早于4.2的项目中,现在丢失了自定义类!! 机器设置?当我创建一个新项目时,一切都很好,直到我添加工具栏按钮或工具栏项,然后无论如何都会消失! - Joe
1
对我没用,尝试了重启、product->clean等所有方法。它只显示UITableViewController类作为选项。Xcode 4.6,更新到5,希望问题真的得到解决... - Jake Armstrong
是的,升级到Xcode 5解决了这个问题。我认为可能是我在创建自定义类时出了问题,就像其他几个答案中描述的那样,正确地将其添加到项目中可能已经解决了这个问题,谁知道呢。 - Jake Armstrong
这对我也起作用了。我保存了项目,完全退出了xCode,然后它就起作用了。这很好,但为什么会发生这种情况呢?有人能解释一下吗? - preynolds
显示剩余3条评论

18

遇到了同样的问题,重启XCode没有帮助。你可以右键单击Storyboard并选择打开为 > 源代码。在XML文件中找到你的视图控制器元素,然后添加customClass属性:

遇到相同问题,重启XCode无效。您可以右键点击Storyboard并选择打开方式 >源代码。在XML文件中找到您的视图控制器元素,并添加一个customClass属性:

<viewController title="Login" id="TJH-Bg-q4u" customClass="XYZLoginViewController" sceneMemberID="viewController">
   ...
</viewController>

手动覆盖 FTW :).


我曾经遇到过同样的问题,这个方法解决了我的问题。不确定如何确保这种情况不会再次发生。 - Laurent
这是唯一对我起作用的方法。重新启动Xcode确实使自定义类出现在自定义类下拉菜单中,但并非我想要更改的视图控制器!由于某种原因,此视图控制器不允许我从下拉列表中分配它,也不允许我手动在字段中输入它。但是对于我的所有其他视图控制器都可以。我无法更改的特定视图控制器是唯一具有嵌套导航控制器的视图控制器,这是我能看到的唯一区别。 - dragonflyesque

4

为了使其工作,您需要确保以下几点:

1)添加到故事板的元素是一个UIViewController

2)您定义的类将UIViewController作为其超类

@interface MapShownViewController : UIViewController

3) 该类在项目中已经正确构建。


1
我已经按照所有步骤进行了操作。一切都很好,除了我仍然没有在列表中看到该类 :s。可能是某个更通用的参数设置不正确吗? - BMN

4

请检查您的项目设置。xcode->目标->构建阶段->编译源码 您的视图控制器实现文件必须添加到此列表中。


我有这个文件,但它和其他文件不同。它前面没有“...在[项目名称]”这样的字样。这是怎么发生的? - BMN
尝试添加一个新的控制器。它会要求你将文件添加到目标中(项目和测试都要添加),也许你没有勾选它们。我不确定。对于这个问题,你可以在编译源代码选项卡中删除并添加实现文件。 - Mihriban Minaz
我已经重新创建了它。我已经勾选了复选框将其添加到项目中。现在它已经正确地编译源代码了。但是我看不到它在列表中 :( - BMN
确定你是文件的所有者?如果是的话,请确保正确书写视图控制器的名称,包括字符大小写。另外,也许你可以尝试更改视图控制器的名称。这只是假设,但是Map.h可能已经是XCode中使用的对象。将其更改为MyMapViewController等。 - Mihriban Minaz

1

我遇到了这个问题,并尝试了这里发布的所有其他解决方案。

对我有用的是在创建自定义类之后设置正确的超类。然后,您应该能够从类下拉菜单中找到并选择它。

例如:

class LabsViewController: UITableViewController {

0

检查一下你在新类中选择的超类是否正确。有时候你会创建一个继承自UITableVIewController的视图控制器,但这种情况不能应用于Storyboard中的ViewController模式。


我遇到了同样的问题,我看不到我定义的新子类(SubClass)。 - anwarma

0

只是想添加另一个可能的解决方案,因为其他方法没有帮助我解决问题。

我注意到使用 Command+Shift+O 搜索我的自定义视图控制器文件时,它被找到了,但我无法看到文件在哪个文件夹中,所以我发现由于某种原因我的自定义类在项目中丢失了,但仍然可以在搜索中找到。

我所要做的就是将文件再次移动到项目中,Voila!

希望这能帮助未来的某个人。


0

我在Mac OSX应用程序上使用Xcode 7.1.1时遇到了同样的问题。我尝试了其他答案中的所有建议,但都没有成功。

最后,我删除了我的视图控制器文件,并创建了全新的文件。
然后,奇迹般地,问题解决了...


0

我不得不将我的自定义类设置为继承自UIViewController并充当表视图控制器的UITableViewController。我使用了一个简单的技巧,只需将我的自定义类继承更改为“:UITableViewController”,然后我就可以自由地将这个类设置为控制器。当然,在设置完成后,我又将继承关系改回来了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接