关于ios:这是什么意思?

What does this mean? “'NSUnknownKeyException', reason: … this class is not key value coding-compliant for the key X”

我正在尝试将UILabel与在我的类中创建的IBOutlet链接起来。

我的应用程序因以下错误而崩溃。这是什么意思?我怎么修?

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key XXX.'


你的关系可能不好。

我犯过很多次这个错误。虽然Techzen的回答在这种情况下是绝对正确的,但另一个常见的原因是您更改了.h/.m中已连接到NIB中文件所有者的iboutlet属性的名称。

从你的笔尖:

  • 在ib中选择对象并转到"连接检查器"。
  • 在"引用出口"下,确保您的对象没有连接到旧的属性名…如果是,请单击小的"x"删除引用并重新生成。

    example 1

  • 另一个常见的原因是,如果您使用故事板,uibutton可能有多个分配(解决方案几乎与nib相同):

  • 打开故事板并右键单击ui按钮
  • 您将看到此按钮有多个分配/引用。删除一个带有小"X"的灰色"主…"窗口:

    example 2


  • 视图控制器在XIB中的类可能不正确。

    我下载了你的项目。

    你得到的错误是

    'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key string.'

    这是由于MainWindow.xib中的Second视图控制器具有一个UIViewController类而不是SecondView类。更改为正确的类可以解决问题。

    顺便说一下,在Objective-C中使用"string"这样的名称是不好的做法,它会引起运行时命名冲突。即使在一次性练习应用程序中也要避免使用。命名冲突很难被跟踪,您不想浪费时间。

    此错误的另一个可能原因是:当将元素从一个控制器复制和粘贴到另一个控制器时,Xcode以某种方式将该链接保留到原始控制器,即使在编辑并将此元素重新链接到新控制器之后也是如此。

    此错误的另一个可能原因:

    不良出口。

    您已经在.h文件中删除或重命名了一个出口名称。

    .xib.storyboard文件的连接检查器中删除它。


    为了消除这个错误,我不得不从模拟器/iPhone中删除这个应用程序。


    当我试图实现表的自定义viewcell时,出现了这个错误。当我突出显示XIB的视图控制器并连接到CellView中的元素时,导致了错误"这个类不是键值编码兼容的键",一旦我删除了这些,它就消除了错误。

    删除下图中的连接。Delete the connections in inspector when File Owner is highlighted

    只需确保您只与表视图单元格有连接。若要检查,请单击"表视图"单元格,然后在"检查器"中查找连接。

    The connection should be in here when Table View Cell is highlighted


    有时这与您的"从目标继承"有关,必须设置该值。使用单目标应用程序,您可以选择从目标继承。如果您有多个目标,请选择所需的目标。

    enter image description here


    如果它是仅限iPhone的应用程序,而不是通用应用程序,请确保以下字段为空:

    目标>摘要>iPhone/iPod部署信息>主界面

    如果指定xib,它将崩溃。


    此错误表示已连接的接口生成器对象在其所有者的源(文件的所有者)中被删除/重命名。

    控件单击界面生成器中文件的所有者,如果您看到需要修复的感叹号。

    在下面的图片中,您可以看到"aremovedview"的右边有一个感叹号,这是因为我在ib中连接iboutlet视图对象时删除了它。

    enter image description here

    这会产生以下错误:由于未捕获的异常"nsUnknownKeyException",正在终止应用程序,原因:"[setValue:ForUndefinedKey:":此类不是键aremovedView的键值编码兼容项。


    我也有同样的问题,虽然Techzen的答案可能确实令人惊讶,但我发现很难将其应用到我的情况中。

    最后,我通过对象下列出的控制器(下图中突出显示)链接标签,而不是通过文件所有者来解决这个问题。

    希望这有帮助。

    enter image description here


    在我的例子中,它是故事板源代码中的一个错误,请遵循以下步骤:

  • 首先打开故事板作为源代码
  • 搜索
  • 删除不需要的连接
  • 例如:

    1
    2
    3
    4
    5
    <connections>
        <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
        <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
        <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
    </connections>

    如您所见,这些是代码变量名称和情节提要布局XML标记之间的连接;)


    enter image description hereenter image description here

    我的修复方法与Gerard Grundy的类似。在使用XIB创建自定义UITableViewCell时,我错误地将自定义类名应用于文件的所有者,而不是UITableViewCell。将类应用到画布上的UITableViewCell,并将我的IBoutlet属性连接到它,解决了这个问题。


  • 您只需要指定一次IBOutlet,不需要使用IBOutlet标签。
  • 你用你的UIViewController实例化你的笔尖吗?有时你应该打电话给[SecondView initWithNibName:@"yourNibName" bundle:nil];

  • 只有在设备(iPhone)上进行调试时,我才会遇到这种情况。iOS模拟器工作正常。从xcode做一个"product->clean"似乎可以解决这个问题,但我不知道为什么。


    这可能是因为您已经控制了拖动并创建了一个出口或操作,但忘记了删除它。即使您删除了代码,或者即使您已经制作了足够的Cmd+Z,您也需要进入故事板的连接检查器,查看您创建的操作或出口是否仍在这里。


    我收到了同样的错误信息,谢谢(!!)从http://www.idev101.com发来的Kira,我解决了这个问题。我只是在谷歌搜索和堆积了所有这些线索后才找到她的网站。我现在在这里发布下一个关于stackoverflow的帖子,和我有同样的挑战,因为那个人很可能会通过google进入这个话题。

    我意识到,我做错了:

    1
    UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

    而不是这个:

    1
    DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

    在哪里?

    1
    DeviceViewController

    我班的名字也叫

    1
    2
    DeviceViewController.h
    DeviceViewController.m

    你必须

    1
    "import DeviceViewController.h"

    在您要调用的实现(.m文件)中,例如,另一个uiviewcontroller。

    如果我只对像我这样的初学者说明显的话,我绝对不会感到抱歉,因为这与问题并不完全相关,但我正在搜索4(???)对于这些错误消息的答案,现在已经是几个小时了。如果我能把这个留给一两个人,那就太好了:)

    PS:对于那些对代码如何继续加载其他uiviewcontroller感兴趣的用户:

    1
        [self presentViewController:deviceViewController animated:YES completion:nil];


    查看其他答案,似乎有很多事情会导致此错误。这里还有一个。

    如果你

    • 具有自定义视图
    • 添加了@IBinspectable属性
    • 然后删除了它

    然后您可能会得到一个类似于

    Failed to set (xxx) user defined inspected property on [Your Custom
    View] ...: this class is not key value coding-compliant for the key
    [xxx].

    解决方案是删除旧属性。

    enter image description here

    打开类的标识检查器,在用户定义的运行时属性下选择属性名,然后按减号按钮(-)。


    当视图控制器最初有一个.xib文件,但现在是以编程方式创建时,我会遇到这种情况。

    即使我已经从这个项目中删除了.xib文件。用户iphone/ipad可能包含此viewcontroller的.xib文件。

    尝试加载.xib文件通常会导致此崩溃:

    1
    Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'

    以编程方式创建时的解决方案可能是:

    1
    2
    3
    4
    -(void)loadView {
        // Ensure that we don't load an .xib file for this viewcontroller
        self.view = [UIView new];
    }

    标识检查器中视图控制器的"模块"属性可能与您预期的不同。还要确保将新类添加到目标列表中。


    对于一个有两个目标(有自己的主窗口XIB)的项目,我也遇到了类似的问题。导致这个错误的根本问题是uiviewController类没有包含在第二个项目的资源列表中。也就是说,接口生成器允许我在mainwindow.xib中指定它,但是在运行时系统找不到类。

    也就是说,cmd单击有问题的uiviewcontroller类,然后再次检查它是否包含在"目标"选项卡中。


    这可能是引用已重命名或删除的XIB接口中的组件的情况。重新引用对我来说很有用。


    只是为了增加这个,因为我也得到了这个错误。浏览所有这些答案似乎最适用于使用用户界面和故事板。我知道最初的海报看起来确实在使用UI,但是当搜索此错误的可能原因时,大多数问题都会导致这个问题,其他问题会作为重复项关闭,或者只是在故事板中连接事物时出现问题,因此我将添加我的解决方案。

    我正在编写Swift2中的Web服务代码。我已经构建了所有需要的代理对象和存根。当我遍历返回的XML时,我动态地实例化了我的对象,这些对象都来自于NSObject,并在它们上使用setValue:forKey。每次setValue:forKey试图设置一个属性时,它都会因为这个错误而崩溃。

    对于我处理的每种类型(如Bool?CShort?String?,我都有一个switch语句,对于每个XML节点,我都检查了对象上的类型,然后将值转换为该类型,并尝试用setValue:forKey设置它。

    最后,我开始评论所有这些setValue:forKey行,发现我的defaultswitch语句案例确实适用于String?

    我最后发现,如果没有直接映射到像String?NSNumber?这样的目标C类型,您就不能在setValue:forKey中使用可选的swift类型。我最后把所有CShort?类型都改成NSNumber?,因为它有一个直接的映射。对于Bool?,我可以直接使用Bool并初始化为false。其他人可能没有这种奢侈。

    不管怎样,这是多么令人头疼的一件事,所以希望这能帮助其他有类似问题的人,并不断被重定向到这个问题,并对自己说,"我在UI中没有做任何事情!!

    因此,最后再次重申一个时间键值编码不适用于选项。在下面,我找到了一个地方,但我忘记了在哪里,所以我向张贴这张照片的人道歉,如果我记得在哪里找到了这张照片,但它救了我的命,我会给予表扬:

    You cannot use KVC on an Optional Int property, because KVC is Cocoa /
    Objective-C, and Objective-C cannot see an Optional Int - it is not
    bridged to Objective-C. Objective-C can only see types that are
    bridged to Objective-C:

    class types that are derived from NSObject

    class types that are exposed with @objc

    Swift structs that are bridged


    我刚刚在我的复制项目中遇到了这个问题,通过检查两个位置解决了这个问题:

    1-确保列表中有.m文件->项目-生成阶段-编译源文件2-之后,转到Interface Builder(这可能是仅使用ib时发生的错误),并取消链接所有属性、标签、图像等…然后重新链接所有。我已经意识到我已经删除了一个属性,但它仍然在ib中链接。

    希望对一些人有用。


    "此类不符合密钥的密钥值编码"我知道有点晚了,但我的答案不一样,所以我认为需要贴出来,我把第二个控制器推错了,这是样品

    推动控制器的方法错误

    1
    2
    3
    UIViewController* controller = [[UIViewController
     alloc]initWithNibName:@"TempViewController" bundle:nil];
             [self.navigationController pushViewController:controller animated:true];

    正确方法

    1
    2
    3
    TempViewController* controller = [[TempViewController
     alloc]initWithNibName:@"TempViewController" bundle:nil];
             [self.navigationController pushViewController:controller animated:true];

    我没有找到像上面这样的答案,所以也许它可以帮助有同样问题的人。


    这是另外一个错误!

    以下是我如何修复的。我使用的是Xcode版本6.1.1和Swift。每次我的应用程序试图执行SEgue跳转到下一个屏幕时,我都会遇到这个错误。这就是我所做的。

  • 检查按钮是否连接到正确的操作。(这不是问题,但仍然可以检查)
  • 检查按钮是否没有您可能错误创建的任何其他操作或插座。(这不是问题,但还是可以检查的)
  • 检查日志并确保下一屏幕中的所有按钮都具有正确的操作,如果有任何分段,请确保它们具有唯一的标识符。(这就是问题所在)
    • 其中一个段没有唯一标识符
    • 其中一个按钮有一个动作和两个插座,这是我错误创建的。
    • 删除任何其他插座,并确保您进入下一个屏幕的段具有唯一的标识符。
  • 干杯,


    我发现的另一个"不符合"的问题是,由于某种原因,我设法获得了一个类的两个副本。

    我把钥匙加错了。接口生成器仍然看到了这些键,并让我连接它们,但在运行时它使用的是没有新键的类的另一个副本。

    为了找出哪个是"正确"的拷贝,我使用xcode的cmd,单击别处的类名跳到正确的拷贝,然后我删除了坏的未使用的拷贝(先从未使用的拷贝中恢复我的编辑)。

    故事的寓意:重复的类文件很糟糕。


    我也有同样的症状。根本原因是源文件的"目标成员"未设置为正确的目标。我想这意味着我的类不会被构建并包含在我的应用程序中。

    改正它:

  • 突出显示.m文件。
  • 在右窗格中,选择文件检查器。
  • 在"目标成员"部分下,确保选中了适当的生成目标。
  • 希望这能帮助别人。


    如果您有一个带有iboutlets的自定义uiviewcontroller子类,这会导致问题,那么我发现实际消除错误的唯一步骤是

    .1将类更改为uiviewcontroller

    .2断开所有插座(它们现在都有黄色三角警告)-只需断开有问题的插座即可。

    .3所有的标准步骤都是–↑?k,删除派生数据(,祈祷垫,担心珠)

    .4启动应用程序-转到有问题的场景。

    .5终止应用程序,返回到Interface Builder将类更改回自定义类名。

    .6重新连接插座。

    启动应用程序&;这通常会清除关键值合规性问题。


    以我为例。合并后,xib文件中没有丢失的出口。

    Shift + Command + K

    解决了我的问题。我清理了我的项目并重建了它。


    在我的例子中,这是由引用错误的笔尖引起的:

    1
    BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];


    我在故事板上发现了这个错误。上面的解决方案似乎不是问题所在,所以我最终删除了视图控制器并重新添加它(当然,重新连接segue并重新分配类),修复了它。我不知道它到底是什么,但在这开始之前不久,我已经重命名了相关联的视图控制器类,所以可能它承载了一些东西。


    我也有同样的问题。我确实重置了模拟器。删除和添加按钮控件。终于洗清了。:)由于堆栈溢出。我的代码如何变得正常并开始工作。


    我也有同样的问题。我在一个XIB文件中创建了一个TableViewCell,并得到了这种错误。我的问题是我将"文件的所有者"类定义为我的单元视图控制器。我刚把它拿出来并设置了单元的类(在xib文件中,单击单元的边界,转到右面板的第三个选项卡,在那里它说类选择了视图控制器)。

    还可以尝试清除代码。


    对于连接属性检查outlets中的所有ui元素,.h文件中可能有outlets to ui元素,但不具有iboutlet属性,.h头文件中的相应属性。.h文件中可能缺少一个或多个属性项。


    您可能需要删除该插座,通过将表单ib绘制到.h文件来重新创建它。


    通过在Storyboard/XIB界面中选择有问题的对象并打开"连接检查器"(View->Utilities->Show Connections Inspector),检查是否有杂散引用出口。如果你真的移除了不需要的连接,你应该走了。


    我从头文件中删除了属性。我找不到任何对它的引用,但调试错误仍在引用它。我发现NIB文件仍然引用它。我删除了引用它的块,一切都已修复。

    在项目导航器中,

    找到NIB(XIB)文件。右键单击并查看源。我删除了以下完整部分

    1
    2
    3
    4
    5
    6
    7
    8
    <object class="IBConnectionRecord">
        <object class="IBCocoaTouchOutletConnection" key="connection">
            <string key="label">DeleteLabel</string>
            <reference key="source" ref="372490531"/>
            <reference key="destination" ref="774585933"/>
        </object>
        <int key="connectionID">20</int>
    </object>

    当视图控制器类中的两个变量引用了一个UI标签或其他UI元素,并且删除了其中一个变量时,我也会遇到这种情况。


    我也有同样的问题。我的项目发生这种情况是因为我更改了我的产品名称,但是在Interface Builder中,我使用的是旧名称作为模块,这会导致崩溃,所以一定要检查所有的XIB模块名称是否也被更改。


    这种情况的另一个原因是,您声明此属性实现为@dynamic,但类在父类中找不到它。


    在我的例子中,viewcontroller.m中的iboutlet属性名被更改了,但故事板中的属性名没有更改。将iboutlet重新引入viewcontroller.m,按ctrl拖动解决了这个问题。我还注意到一种在Xcode中找到这种"孤立"iboutlets的方法:(看图片)那些不是"孤立"的iboutlets有同心圆而不是线号。

    Orphaned


    我在UI视图控制器的故事板和Swift类中遇到了这个问题。通过使用@objc指令解决了它:

    1
    @objc(MyViewController) class MyViewController

    我在升级到xcode7之后遇到了Swift类的问题。通过使用@objc指令解决了它:

    @objc(XXXviewController)类XXXviewController


    我也有同样的问题,原因是在InterfaceBuilder中指定了一个模块(而不是将其留空)。所以,当我使用一个不同于我设置的模块时,应用程序会崩溃:s…希望这对别人有帮助,因为我的问题不是因为一个坏的或过时的出口!


    提出了同样的问题。我的解决方案是在主情节提要下拉列表中放置正确的情节提要值。我重命名了mainstoryboard.storyboard,但没有重置部署信息。


    在我看来,

    1
    [[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]

    原因就是这样。

    将此项替换为initWithNibName,已解决。


    这已经发生在我身上两次了。

    解决方案是重新制作整个故事板,因为我从另一个故事板复制了它(因为它几乎是相同的)


    当我将一个uiview链接到一个故事板并连接iboutlet时,我就发生了这种情况,比如:

    1
    @property (strong, nonatomic) IBOutlet UIView *someView

    但后来,我将uiview设置为自定义类,但忘记更改上面定义的iboutlet的类名。这是一个奇怪的错误,因为如果自定义视图没有子视图,它不会抱怨,但一旦有子视图,它就会显示问题中所述的错误,但显示在其中一个子视图上,而不是实际存在问题的外部uiview上。让我删除并阅读所有的子视图,试图找出问题所在,而实际上与子视图无关


    这可能意味着您正试图使用一个排序描述符,而在开始时没有使用atsign。如:

    [array valueForKeyPath:@"distinctUnionOfObjects.self"]

    实际上必须是:

    [array valueForKeyPath:@"@distinctUnionOfObjects.self"]


    当我使用主故事板作为启动屏幕文件时,我遇到了同样的问题。我猜如果你使用一个故事板作为启动屏幕文件,它不应该连接到视图控制器,因为它还没有被加载。


    我遇到同样的问题的原因不同:我使用主故事板作为启动屏幕文件。我猜如果你使用一个故事板作为启动屏幕文件,它不应该连接到视图控制器,因为它还没有被加载。


    以及其他问题,你可以在其他答案中看到。我为自己创建这个错误的方式是,我从头开始一个项目,然后删除故事板的初始场景,然后将另一个项目中的一个场景粘贴到我的故事板中。

    这样做没问题。您只需要添加故事板的一个入口点,即检查您喜欢的控制器上的is initial View Controller。否则它将是一个灰色的场景,并给您一个错误。

    enter image description here


    通常当我遇到这种情况时,@technzen的回答会起作用。然而,昨天,我花了一段令人难堪的长时间与故事板连接搞混,结果发现问题出在我的代码中。

    我有一个自定义的视图控制器,可以处理故事板中的各种布局,但是其中一个布局需要一个特殊的标签,其他人不使用。所以我创建了一个这样的子类:

    1
    @interface MyViewControllerSubclass : MyViewController

    然后我在myviewControllerSubclass.m中添加了一个私有属性:

    1
    2
    3
    @interface MyViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *crashesApp;
    @end

    Xcode很高兴地允许我连接这个iboutlet,但是每次加载视图时,应用程序都会与旧的"不符合‘chrashesapp’键的键值"崩溃。

    回顾起来,解决方案是将私有类别更改为使用正确的名称,即子类的名称:

    1
    2
    3
    @interface MyViewControllerSubclass ()
    @property (weak, nonatomic) IBOutlet UILabel *noMoreCrashing;
    @end

    在我的例子中,我在故事板中添加了一个viewcontroller,但是我没有在设计器中为它分配故事板ID。一旦我给它一个身份证,它就起作用了。

    使用Xamarin/Visual Studio 2015。


    我的问题是在我更改了目标名称之后开始的。

    我自己的自定义UI类将模块名称设置为旧的目标名称。

    我把目标名称改成了新的,现在可以用了。


    我也有这个问题。我将一个带有iboutlet的视图从一个xib文件复制到另一个xib文件。即使我删除了旧的引用并创建了一个新的引用,这个错误仍然在发生。

    我最终重新启动Xcode来解决这个问题。


    确保在.m文件中添加自定义类(甚至是空的)实现,如下所示:

    1
    2
    @implementation MySubclass
    @end

    我在另一个稍有不同的形式上也犯了同样的错误:

    在InterfaceBuilder中,我有一个带有自定义子控制器的导航控制器。它的类名设置正确,但是NIB名称(select subcontroller,go to attributes inspector)设置为错误的文件(基本上设置为另一个目标)。将其重置为正确的文件名解决了问题。


    有时不添加或从目标中删除Swift文件,请转到"目标"->"生成设置"->"编译源"->"查看是否缺少任何必需的Swift类文件。在我的例子中,由于编译中不存在Swift源文件,应用程序崩溃。


    如果您想在Interface Builder中的一个单独的XIB文件中设计一个小的子视图,并且在ib中,您将它设置为与父视图相同的类,那么这个问题也会发生。

    如果这样显示:

    1
    2
    UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NameOfTheSubviewNibFile" bundle:nil];
    [self.view addSubview:vc.view];

    该视图将出现,但如果它的IBOutlets连接到其文件所有者,则会收到错误消息。因此,这应该是可行的:

  • 在父视图的代码中,声明一个IBOutlet UIView *mySubview以引用子视图的NIB文件中的视图。
  • 在子视图的NIB文件中,将文件所有者连接到视图,并将其设置为mySubview
  • 通过以下操作显示:
  • 1
    2
    [[NSBundle mainBundle] loadNibNamed:@"NameOfTheSubviewNibFile" owner:self options:nil]
    [self.view addSubview:mySubview];

    你会没事的!


    如果你试图观察一个不存在的值,请注意。

    这种情况发生在我身上的原因很简单,因为我在观察文本字段的"文本"属性时,应该改为观察"文本"属性。


    是否保持选取器对象未连接?

    lol 54个答案,其中没有一个是我的解决方案。讨论一个常见的错误。

    在我的例子中,这是因为我的VC上有一个选择器对象,并且没有为它设置一个出口和操作。

    当我只是想看看布局是什么样子的时候,我经常会让按钮等保持不连接。但似乎你不能为一个拾荒者这样做。


    我发现了另一种可能引起这个问题的可能性。

    当使用带有错误XIB名称的"initWithNibName"方法时,也会导致这种崩溃。

    例如,您选择更改XIB文件的名称,然后foget将"initWithNibName"方法中使用的名称更改为相同的名称。


    我在处理TableView单元格时遇到相同的错误日志。我发现我的uiLabels对文件的所有者和单元格类都有重复的引用出口(您可以在引用检查器中查看它)。当我删除对文件所有者的引用时,情况会好转。


    我记得以前也遇到过类似的问题,我通过改变路线来解决:

    1
    _vicMain = [[UIViewController alloc] initWithNibName:@"vicMainScreen" bundle:nil];

    进入:

    1
    2
    3
    4
    5
    6
    7
    #include"vicLogin_iPad.h"       // This is the H file of the class holding the code for
                                     // processing all the IBOUtlets for the Login screen
    .
    .
    .

    _vicMain = [[vicLogin_iPad alloc] initWithNibName:@"vicMainScreen" bundle:nil];

    注意,我最初声明uiviewcontroller初始化我的uvicmain,在使用顶部的弹出窗口后,我意识到两者都使用相同的uiviewcontroller。

    被:

    1)包括您的类(子视图的),以及执行上述vicmain(视图控制器对象/变量)的相同模块,在我的例子中是"viclogin ipad.h",并且:

    2)使用自定义构造函数声明对象(即,使用"EDOCX1"〔0〕代替"EDOCX1"〔1〕。

    问题解决了。

    我希望这有帮助,因为准确指出错误消息中缺少细节是件痛苦的事…

    当做海德萨蒂


    另一个棘手的案例:

    在ib中将viewcontroller添加到情节提要中,删除其视图并将自定义类设置为"myviewcontroller",以便从myviewcontroller.xib实例化视图。

    将情节提要ID指定为相同的"MyViewController"会导致异常。

    将情节提要ID更改为其他名称可以解决此问题。


    我通过做两件事来解决这个问题:

  • 视图的固定类引用:
  • 重新导入所有插座:

  • 我遇到问题的原因是,我复制了一个故事板文件(xcode之外,如果我正确调用的话),那么复制文件中的所有视图控制器都具有与原始文件相同的对象ID。补救方法是复制粘贴的视图控制器,然后它们将获得一个新的对象ID。您可以在标识检查器中看到对象ID。