草庐IT

ios - 'NSUnknownKeyException',原因 : '[<ViewController 0x8a45930> setValue:forUndefinedKey:]:

coder 2023-09-05 原文

<分区>

当我在 iPhone 模拟器上运行我的第一个“sqlite”应用程序时出现此错误。 xcode 说没问题,但是当我点击我的应用程序时,它会在调试窗口中抛出错误。我在这里放置了所有必要的代码,请帮助我连接“sqlite”并删除这些错误。

错误如下:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<ViewController 0x8a45930> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key departmentbox.'
*** First throw call stack:
(0x2091012 0x119ee7e 0x2119fb1 0xc4b711 0xbccec8 0xbcc9b7 0xbf7428 0x3030cc 0x11b2663 0x208c45a 0x301bcf 0x1c6e37 0x1c7418 0x1c7648 0x1c7882 0x116a25 0x116dbf 0x116f55 0x11ff67 0xe3fcc 0xe4fab 0xf6315 0xf724b 0xe8cf8 0x1fecdf9 0x1fecad0 0x2006bf5 0x2006962 0x2037bb6 0x2036f44 0x2036e1b 0xe47da 0xe665c 0x233d 0x2265)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

数据库管理器.m:

//
//  DBManager.m
//  sqlite
//
//  Created by Techinfiniti on 14/05/14.
//  Copyright (c) 2014 Techinfiniti. All rights reserved.
//

#import "DBManager.h"
#import <sqlite3.h>

static DBManager *sharedInstance = nil;
static sqlite3 *database = nil;
static sqlite3_stmt *statement = nil;



@implementation DBManager

+(DBManager*)getSharedInstance{

    if(!sharedInstance){
        sharedInstance = [[super allocWithZone:NULL]init];
        [sharedInstance createDB];
    }
    return sharedInstance;
}

-(BOOL)createDB{

    NSString *docsDir;
    NSArray *dirPaths;

        dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
    docsDir = dirPaths[0];
    databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"student.db"]];
    BOOL isSuccess = YES;
    NSFileManager *filemgr = [NSFileManager defaultManager];

    if([filemgr fileExistsAtPath:databasePath]== NO)
    {
        const char *dbpath = [databasePath UTF8String];
        if(sqlite3_open(dbpath,&database)== SQLITE_OK )
        {
            char *errMsg;
            const char *sql_stmt = "create table if not exists studentsDetail (regno integer primary key, name text, department text, year text)";

            if(sqlite3_exec(database,sql_stmt,NULL,NULL,&errMsg)!= SQLITE_OK)
            {

                isSuccess = NO;
                NSLog(@"failed to open create table");
            }
            sqlite3_close(database);
            return isSuccess;
        }
        else{
            isSuccess = NO;
            NSLog(@"Failed to open/create database");
        }
    }return isSuccess;

}

-(BOOL)saveData:(NSString*)registerNumber name:(NSString*)name
     department:(NSString *)department year:(NSString *)year;
{
    const char *dbpath = [databasePath UTF8String];
    if(sqlite3_open(dbpath,&database)== SQLITE_OK )
    {
        NSString *insertSQL = [NSString stringWithFormat:@"insert into studentDetail(regno,name,department,year)values(\"%d\",\"%@\",\"%@\",\"%@\")",[registerNumber integerValue],name,department,year];
        const char *insert_stmt = [insertSQL UTF8String]; sqlite3_prepare_v2(database, insert_stmt,-1,&statement,NULL);



    if(sqlite3_step(statement) == SQLITE_DONE)
{
    return YES;
}
else{
    return NO;
}
sqlite3_reset(statement);
}
return NO;

}

-(NSArray*) findByRegisterNumber:(NSString *)registerNumber
{

    const char *dbpath = [databasePath UTF8String];
    if(sqlite3_open(dbpath,&database)== SQLITE_OK)
    {
        NSString *querySQL = [NSString stringWithFormat:@"select name, department,year from studentDetail where regno=\"%@\"",registerNumber];

        const char *query_stmt = [querySQL UTF8String];
        NSMutableArray *resultArray = [[NSMutableArray alloc]init];
        if(sqlite3_prepare_v2(database,query_stmt,-1,&statement,NULL)== SQLITE_OK)
        {
            if(sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString *name = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
                [resultArray addObject:name];

                NSString *department = [[NSString alloc]initWithUTF8String:(const char*) sqlite3_column_text(statement,1)];
                [resultArray addObject:department];
                return resultArray;

                 NSString *year = [[NSString alloc]initWithUTF8String:(const char*) sqlite3_column_text(statement,2)];
                [resultArray addObject:year];
                return resultArray;


            }
            else{
                NSLog(@"Not Found");
                return nil;
            }
            sqlite3_reset(statement);
        }

    }
    return nil;
}

@end

ViewController.h:

//
//  ViewController.h
//  sqlite
//
//  Created by Techinfiniti on 14/05/14.
//  Copyright (c) 2014 Techinfiniti. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "DBManager.h"

@interface ViewController : UIViewController<UITextFieldDelegate>
{
    IBOutlet UITextField *regNoTextField;
    IBOutlet UITextField *nameTextField;
    IBOutlet UITextField *departmentTextField;
    IBOutlet UITextField *yearTextField;
    IBOutlet UITextField *findByRegisterNumberTextField;
    IBOutlet UIScrollView *myScrollView;
}

-(IBAction)saveData:(id)sender;
-(IBAction)findData:(id)sender;


/*
- (IBAction)find:(id)sender;

- (IBAction)save:(id)sender;


@property (weak, nonatomic) IBOutlet UITextField *findbox;

@property (weak, nonatomic) IBOutlet UITextField *regnobox;

@property (weak, nonatomic) IBOutlet UITextField *namebox;

@property (weak, nonatomic) IBOutlet UITextField *departmentbox;

@property (weak, nonatomic) IBOutlet UITextField *year;
*/

@end

ViewController.m:

//
//  ViewController.m
//  sqlite
//
//  Created by Techinfiniti on 14/05/14.
//  Copyright (c) 2014 Techinfiniti. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if(self)
    {


    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
- (IBAction)find:(id)sender {
}

- (IBAction)save:(id)sender {
}

 */

-(IBAction)saveData:(id)sender{
    BOOL success = NO;
    NSString *alertString = @"Data Insertion falied";
    if(regNoTextField.text.length>0 && yearTextField.text.length>0 && departmentTextField.text.length>0 && yearTextField.text.length>0)
    {

        success = [[DBManager getSharedInstance]saveData:regNoTextField.text name:nameTextField.text department:departmentTextField.text year:yearTextField.text];
    }
    else
    {
        alertString = @"Enter all fields";
    }

    if(success == NO)
    {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:alertString message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }

}

-(IBAction)findData:(id)sender{

    NSArray *data = [[DBManager getSharedInstance]findByRegisterNumber:findByRegisterNumberTextField.text];

    if(data == nil)
    {

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
                              @"Data Not Found" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        regNoTextField.text = @"";
        nameTextField.text = @"";
        departmentTextField.text = @"";
        yearTextField.text = @"";

    }
    else{

        regNoTextField.text = findByRegisterNumberTextField.text;
        nameTextField.text = [data objectAtIndex:0];
        departmentTextField.text = [data objectAtIndex:1];
        yearTextField.text = [data objectAtIndex:2];
    }


}


#pragma mark - Text field delegate

-(void)textFieldDidBeginEditing:(UITextField *)textField{

    [myScrollView setFrame:CGRectMake(10,50,300,200)];

}

-(BOOL) textFieldShouldReturn:(UITextField *)textField
{

    [textField resignFirstResponder];
    return YES;
}
@end

有关ios - 'NSUnknownKeyException',原因 : '[<ViewController 0x8a45930> setValue:forUndefinedKey:]:的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  4. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  7. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  8. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  9. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

  10. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

随机推荐