it-swarm.com.ru

setValue: forUndefinedKey: этот класс не соответствует значению ключа для ключа

Я создаю логин для просмотра заявок в службу поддержки. Первый вид - это вид тикета, и, если вы не вошли в систему, вы попадете на экран входа в систему. Однако я получаю это:

Поддержка [3209: 18e03] * Завершение работы приложения из-за необработанного исключения "NSUnknownKeyException", причина: "[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа для кода LoginScreen. '*

Первый стек бросить вызов: (0x1f17012 0x1634e7e 0x1f9ffb1 0x10e1711 0x1062ec8 0x10629b7 0x108d428 0x7990cc 0x1648663 0x1f1245a 0x797bcf 0x65ce37 0x65d418 0x65d648 0x65d882 0x669235 0x8683d2 0x6664f3 0x666777 0x6667b7 0x9d1fe2 0x9c3ad9 0x65e422 0x2b15 0x65f753 0x65fb2f 0x661286 0x65fe3f 0x592910 0x592895 0x5926e5 0x1edfafe 0x1edfa3d 0x1ebd7c2 0x1ebcf44 0x1ebce1b 0x22aa7e3 0x22aa668 0x57c65c 0x1f0d 0x1e35) Libc + + abi.dylib: завершить вызываемое исключение

Вот мой код для LoginScreen.m

#import "UIAlertView+error.h"
#import "LoginScreen.h"
#import "API.h"
#include <CommonCrypto/CommonDigest.h>

#define sayWhat @"REMOVEDFORSECURITY"


@implementation LoginScreen

-(void)viewDidLoad {
    NSLog(@"Found me!");
    [super viewDidLoad];


    //focus on the username field /show keyboard
    [fldUsername becomeFirstResponder];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }

    -(IBA

ction)btnLoginRegisterTapped:(UIButton*)sender {
    if (fldUsername.text.length < 4 || fldPassword.text.length < 4){
        [UIAlertView error:@"Enter username and password over 4 chars each."];
        return;
    }

    //very basic encryption called "salting"
    NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", fldPassword.text, sayWhat];

    //prep the hashed storage
    NSString* hashedPassword = nil;
    unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH];

    //actually hash this
    NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding];
    if (CC_SHA1([data bytes], [data length], hashedPasswordData)){
        hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding];
        } else {
            [UIAlertView error:@"Password can't be sent"];
                return;
        }

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
        fldUsername.text, @"username",
                                   hashedPassword, @"password", nil];
    //here is the web call finally!
    [[API sharedInstance] commandWithParams:params
                               onCompletion:^(NSDictionary *json){
        //returned result
       NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0];

        if([json objectForKey:@"error"]==nil && [[res objectForKey:@"userid"] intValue]> 0) {
                                       //success
        } else {
                                       //error'
        [UIAlertView error:[json objectForKey:@"error"]];
                                   }

    }];


}
@end

и LoginScreen.h

#import <UIKit/UIKit.h>

@interface LoginScreen : UIViewController {
//the login form fields
IBOutlet UITextField* fldUsername;
IBOutlet UITextField* fldPassword;

}

//action for when either button is pressed
-(IBAction)btnLoginRegisterTapped:(id)sender;

@end


    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.Apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="2.0" toolsVersion="2844" systemVersion="12C60" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="A8c-eR-geg">
    <dependencies>
        <plugIn identifier="com.Apple.InterfaceBuilder.IBCocoaTouchPlugin" version="1930"/>
    </dependencies>
    <scenes>
        <!--Tickets View - View Tickets-->
        <scene sceneID="aIJ-Wx-2Yy">
            <objects>
                <viewController title="View Tickets" id="T0P-Bi-31w" customClass="TicketsView" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="4zZ-I2-ltX">
                        <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="You Made It" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Fbu-Sr-Mgf">
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="Fbu-Sr-Mgf" firstAttribute="top" secondItem="4zZ-I2-ltX" secondAttribute="top" constant="138" id="QBp-qM-fKP"/>
                            <constraint firstItem="Fbu-Sr-Mgf" firstAttribute="leading" secondItem="4zZ-I2-ltX" secondAttribute="leading" constant="115" id="goO-5h-RZK"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" id="vu4-JX-C3v"/>
                    <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
                    <connections>
                        <segue destination="TOB-FA-Ss4" kind="modal" identifier="ShowLogin" id="dJH-ge-8CV"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="aSa-2G-5fx" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-518" y="-841"/>
        </scene>
        <!--Login Screen - Login-->
        <scene sceneID="6iZ-QL-7ID">
            <objects>
                <viewController title="Login" id="TOB-FA-Ss4" customClass="LoginScreen" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="w9e-4U-cwC">
                        <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Blue Label Hosting Login" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="SuD-JI-L2T">
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="NeI-zB-U8Y">
                                <constraints>
                                    <constraint firstAttribute="height" constant="31" id="BlH-cG-Jdh"/>
                                    <constraint firstAttribute="width" constant="208" id="Osb-tj-fjn"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits"/>
                            </textField>
                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4Fi-NX-kli">
                                <constraints>
                                    <constraint firstAttribute="height" constant="31" id="X3j-X2-ton"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
                            </textField>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5o5-83-KbW">
                                <constraints>
                                    <constraint firstAttribute="height" constant="36" id="Afu-6h-uru"/>
                                    <constraint firstAttribute="width" constant="161" id="Ef5-df-Jmp"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                                <state key="normal" title="Login">
                                    <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <state key="highlighted">
                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <connections>
                                    <action selector="btnLoginRegisterTapped:" destination="w9e-4U-cwC" eventType="touchUpInside" id="Wgb-L8-sAJ"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="NeI-zB-U8Y" firstAttribute="top" secondItem="SuD-JI-L2T" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="0Pv-zM-WId"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="top" secondItem="NeI-zB-U8Y" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="2Sw-m8-LND"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="trailing" secondItem="NeI-zB-U8Y" secondAttribute="trailing" type="default" id="88O-VQ-qut"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="centerX" secondItem="NeI-zB-U8Y" secondAttribute="centerX" type="default" id="Qu9-PG-YWz"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="centerX" secondItem="5o5-83-KbW" secondAttribute="centerX" type="default" id="RAm-sI-Z3u"/>
                            <constraint firstItem="5o5-83-KbW" firstAttribute="top" secondItem="w9e-4U-cwC" secondAttribute="top" constant="128" id="UTG-NS-bx4"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="top" secondItem="w9e-4U-cwC" secondAttribute="top" constant="20" symbolic="YES" type="default" id="iaC-Ex-EBa"/>
                            <constraint firstItem="SuD-JI-L2T" firstAttribute="centerX" secondItem="w9e-4U-cwC" secondAttribute="centerX" type="default" id="oWP-Gp-Pi5"/>
                            <constraint firstItem="4Fi-NX-kli" firstAttribute="leading" secondItem="NeI-zB-U8Y" secondAttribute="leading" type="default" id="oxE-WD-fVc"/>
                        </constraints>
                        <connections>
                            <outlet property="fldPassword" destination="4Fi-NX-kli" id="4eb-YW-8YI"/>
                            <outlet property="fldUsername" destination="NeI-zB-U8Y" id="Ds4-XS-iqW"/>
                        </connections>
                    </view>
                    <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="FL3-Yk-JbH" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-84" y="-349"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="fJ6-wq-4Tj">
            <objects>
                <navigationController id="A8c-eR-geg" sceneMemberID="viewController">
                    <toolbarItems/>
                    <navigationBar key="navigationBar" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="bnk-dD-E4j">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="T0P-Bi-31w" kind="relationship" relationship="rootViewController" id="3jA-WY-c3V"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="lTO-TW-owb" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-971" y="-910"/>
        </scene>
    </scenes>
    <classes>
        <class className="LoginScreen" superclassName="UIViewController">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/LoginScreen.h"/>
            <relationships>
                <relationship kind="action" name="btnLoginRegisterTapped:"/>
                <relationship kind="outlet" name="fldPassword" candidateClass="UITextField"/>
                <relationship kind="outlet" name="fldUsername" candidateClass="UITextField"/>
            </relationships>
        </class>
        <class className="NSLayoutConstraint" superclassName="NSObject">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/NSLayoutConstraint.h"/>
        </class>
        <class className="TicketsView" superclassName="UIViewController">
            <source key="sourceIdentifier" type="project" relativePath="./Classes/TicketsView.h"/>
        </class>
    </classes>
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
        <simulatedStatusBarMetrics key="statusBar"/>
        <simulatedOrientationMetrics key="orientation"/>
        <simulatedScreenMetrics key="destination" type="retina4"/>
    </simulatedMetricsContainer>
</document>
69
user1890328

Такие необъяснимые исключения часто являются результатом нечистого xib файла. Откройте xib в xcode, выберите "Владелец файла" и нажмите "Инспектор подключений" (верхняя правая стрелка), чтобы увидеть все розетки сразу. Ищите !s, который указывает на отсутствие розетки.

261
AlexWien

Проверьте ваши соединения в Интерфейсном Разработчике. Вы, вероятно, имеете в виду несуществующее IBOutlet или IBAction.

37
Gabriele Petronella

Look "!"

Спасибо, парни. Я решил эту проблему с вашей помощью. Итак, я надеюсь, что этот скриншот будет полезен для тех, у кого такая же проблема.

32
bureaucoconut

Перейдите на вкладку точек останова Xcode. Используйте кнопку внизу, чтобы добавить точку останова исключения. Теперь вы увидите, какой код вызывает setValue: forKey: и связанный стек. Если повезет, это укажет вам прямо на источник проблемы.

Странно, что ваш класс - LoginScreen, но ошибка говорит о том, что кто-то использует "LoginScreen" в качестве ключа. Убедитесь, что LoginScreen.m является частью вашей цели.

enter image description here


Сноска: с Swift возникает общая проблема, если вы измените имя класса (так, вы переименовываете его везде в своем коде). Раскадровка борется с этим, и вам обычно приходится перетаскивать любые соединения, связанные с этим классом. И, в частности, повторно введите имя класса, где бы он ни находился, на вкладке IdentityInspector справа. (В примере с изображением я намеренно ошибся в названии класса. Но то же самое часто случается, когда вы переименовываете класс; , даже если это кажется правильным в IdentityInspector , вам нужно снова ввести имя, оно будет правильно заполнено, и вы готовы.)

24
Graham Perks

У меня была похожая проблема с созданием пользовательских TableCell. Проблема заключалась в том, что я установил FileOwner на свой пользовательский класс, а затем подключил розетки.

FileOwner должен оставаться NSObject.

22
Milos Zikic

Я имел это и просмотрел все и не увидел никаких проблем, но в конце концов вспомнил, что попытался Очистить и очистить Производные данные, и это решило это!

7
Chad Parker

У меня была похожая проблема, но я использовал initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil, явно используя имя класса в качестве передаваемой строки (да, плохая форма!).

Я закончил тем, что удалил и заново создал контроллер представления, используя немного другое имя, но не смог изменить строку, указанную в методе, таким образом, моя старая версия все еще использовалась - даже при том, что она была в мусорной корзине!

Вероятно, я буду использовать эту структуру в дальнейшем, как это предлагается в: Передача двух нулевых параметров в initWithNibName: bundle: метод плохая практика (то есть небезопасный или медленный)?

- (id)init
{
    [super initWithNibName:@"MyNib" bundle:nil];
    ... typical initialization ...
    return self;
}

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

Надеюсь, это кому-нибудь поможет!

2
RndmTsk

Эта ошибка - что-то еще!

Вот как я это исправил. Я использую версию Xcode 6.1.1 и использую Swift. Я получал эту ошибку каждый раз, когда мое приложение пыталось выполнить переход, чтобы перейти к следующему экрану. Вот что я сделал.

  1. Проверено, что кнопка была подключена к правильному действию (это не было проблемой, но все еще хорошо проверить)
  2. Убедитесь, что у кнопки нет никаких дополнительных действий или выходов, которые вы, возможно, создали по ошибке. (Это не было проблемой, но все же хорошо проверить)
  3. Проверьте журналы и убедитесь, что все кнопки на СЛЕДУЮЩЕМ ЭКРАНЕ имеют правильные действия, и если есть какие-либо переходы, убедитесь, что у них есть уникальный идентификатор. (Это была проблема)
    • Один из сегментов не имел уникального идентификатора
    • У одной из кнопок было действие и два выхода, которые я создал по ошибке.

Удалите все дополнительные выходы и убедитесь, что переходы к следующему экрану имеют уникальные идентификаторы.

Ура,

2
Ronaldoh1

У меня была эта проблема, потому что я не использовал StoryBorad, а в свойствах проекта -> Информация о развертывании -> Основной интерфейс был названием Main Xib.

Я удалил значение в главном интерфейсе и решил проблему.

1
Ronaldo Albertini

Если у вас есть разные файлы storybord и если в ваших заголовочных файлах есть ссылки на розетки с созданием розеток, вы просто удалите соединения, щелкнув правой кнопкой мыши по владельцу файлов.

Владелец файла-> Правый клик-> удалить нежелательное соединение.

Пройдите через это для ясного объяснения. Что это значит? "NSUnknownKeyException, причина:… этот класс не соответствует значению ключа, кодирующему ключ X"

0
Narasimha Nallamsetty

Ибо, потому что не имеет 2 функции

@implementation CellTableView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    return [self init];
}
- (void)awakeFromNib {
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
}

@end
0
YannSteph

Я столкнулся с этой же проблемой сегодня. Как и предполагалось в этом ответе , проблема была в нечистой сибе. В моем случае нечистый xib был результатом обновления xib, который загружался чем-то другим, кроме контроллера представления, с которым он был связан.

Xcode позволил мне создать и заполнить новую розетку и подключил ее к владельцу файла, хотя я явно подключил его к источнику правильного контроллера представления. Вот код, сгенерированный Xcode:

    <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LoginViewController"]]>
        <connections>
            <outlet property="hostLabel" destination="W4x-T2-Mcm" id="c3E-1U-sVf"/>
        </connections>
    </placeholder>

Когда я запускал свое приложение, оно зависало с той же ошибкой not key value coding-compliant. Чтобы исправить проблему, я удалил выход из Владельца файла в Интерфейсном Разработчике и явно подключил его к объекту контроллера представления на левой схеме, а не к коду в редакторе помощника.

0
lambmj

Я столкнулся с аналогичной ошибкой при создании пользовательского класса представления, потому что каким-то образом один из выходов был дважды подключен в файле XIB (я думаю, что первоначально элемент управления перетаскивал элемент управления непосредственно в код, но последний элемент управления снова перетаскивался из Владелец файла). Я открыл файл XIB и удалил один из них, после этого все работало нормально. Надеюсь, это поможет.

0
Ray

В моем случае у меня IBOutlet UILabel * description в .h, это было с желтым /!\- "не синтезируется" , насколько я помню. Не знаю, что это и почему только этот лейбл.

Но я получил этот сбой и ошибку, как указано выше. Удалено * описание и воссоздать * описание2. Нет сбоя в результате.

0
djdance

Для меня я переключил вызов для моего заголовка представления коллекции, где я регистрировал перо для регистрации класса. Это исправило это.

0
cynistersix

Я получил это на PickerView всех мест. Сообщение об ошибке называло проблему с "queuePicker" в первом сообщении. Это было вызвано предыдущим ссылочным выходом, который недействителен после того, как я добавил компонент и переименовал исходный NSArray в нечто отличное от queuePicker. CNTL + клик по вашему объекту StoryBoard дает вам соединения. Я щелкнул "x" рядом с ViewController для queuePicker в ссылках на выходы, установил новое соединение, и альт, больше не вылетает.

0
Russell Crow

Вы, вероятно, устанавливаете значение для ключа в alertView, что недопустимо. Ключ в этом случае LoginScreen. Я не вижу никаких вызовов setValue(), поэтому я предполагаю, что это где-то еще в коде.

0
Matt

Обычно это означает, что что-то пытается получить доступ к @ property "GivenName".

Если вы что-то делали с Interface Builder(IB), обычной причиной является то, что вы либо:

  1. удалил это свойство из класса, но еще не удалил соединения в IB
  2. ИЛИ: у вас есть объект-владелец файла, установленный на неправильный класс (проверьте свойства - они различаются в зависимости от того, какую версию xcode вы используете
    • чтобы найти имя класса его установить как. Вы, вероятно, скопировали/вставили файл NIB и не изменили это поле в NIB), и вы подключили выход для этого класса, но фактический владелец файла - это нечто другое
0
Xar E Ahmer

Это случилось со мной по следующему сценарию:

Я создал второй проект в своем рабочем пространстве, выбрал "Single View Application" для шаблона.

Затем я перешел к Interface Builder (основной раскадровке iPhone), добавил UISwitch к основному представлению и подключил его к контроллеру представления через IBOutlet и IBAction (-valueChanged:).

При запуске приложение вылетает с исключением, упомянутым в вопросе. Если я уберу переключатель с обзора, он будет работать.

После тщательного осмотра я понял, что перетаскиваю соединения в ViewController.h другого проекта в том же рабочем пространстве. "Автоматический" набор помощника редактора Interface Builder (a.k.a значок сундука в смокинге) выбрал в качестве "аналога" неправильный файл (с правильным названием).

Надеюсь, что это кому-то поможет, особенно потому, что оба шаблона проекта 'Single View Application' и 'SpriteKit Game' (в моем случае) создают класс контроллера представления по умолчанию, называемый ViewController.

0
Nicolas Miari