0

このエラーの取得:

'NSInvalidArgumentException'、理由:'-[EngineerModel _isNaturallyRTL]:認識されないセレクターがインスタンスに送信されました

「インスタンスに送信された認識されないセレクター」を解決する方法を読みましたか?その他。

アークでXcode4.5.1を使用する(初めてアークを使用する)

これが私のコードです。これは、以前の非アークプロジェクトに基づいています。

database.m

// Models for data
#import "EngineerModel.h"

- (NSArray *)returnEngineers
{
    NSMutableArray *retval = [[NSMutableArray alloc] init];

    NSString *query = @"SELECT * FROM engineers";

    stmt = nil;

    if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &stmt, nil) == SQLITE_OK) {
        while (sqlite3_step(stmt) == SQLITE_ROW) {

            char *engineerIDChr =         (char *) sqlite3_column_text(stmt, 0);
            char *engineerNameChr =         (char *) sqlite3_column_text(stmt, 1);
            char *engineerSigFileChr =         (char *) sqlite3_column_text(stmt, 2);
            char *engineerPhoneChr =   (char *) sqlite3_column_text(stmt, 3);
            char *engineerEmailChr =          (char *) sqlite3_column_text(stmt, 4);
            char *engineerRegNoChr =            (char *) sqlite3_column_text(stmt, 5);

            NSString *engineerID = [[NSString alloc] initWithUTF8String:engineerIDChr];
            NSString *engineerName = [[NSString alloc] initWithUTF8String:engineerNameChr];
            NSString *engineerSigFile = [[NSString alloc] initWithUTF8String:engineerSigFileChr];
            NSString *engineerPhone = [[NSString alloc] initWithUTF8String:engineerPhoneChr];
            NSString *engineerEmail = [[NSString alloc] initWithUTF8String:engineerEmailChr];
            NSString *engineerRegNo = [[NSString alloc] initWithUTF8String:engineerRegNoChr];

            EngineerModel *info = [[EngineerModel alloc] initWithUniqueId:engineerID
                                                               engineerName:engineerName
                                                                     engineerSigFile:engineerSigFile
                                                         engineerPhone:engineerPhone
                                                                engineerEmail:engineerEmail
                                                                  engineerRegNo:engineerRegNo];

            [retval addObject:info];            
        }
        sqlite3_finalize(stmt);
    }
    return retval;
}

データベースには2つのエントリがあります

そしてモデル

//  EngineerModel.h
#import <Foundation/Foundation.h>

@interface EngineerModel : NSObject
{
    NSString *_engineerID;
    NSString *_engineerName;
    NSString *_engineerSigFile;
    NSString *_engineerPhone;
    NSString *_engineerEmail;
    NSString *_engineerRegNo;
}

@property (nonatomic, copy) NSString *engineerID;
@property (nonatomic, copy) NSString *engineerName;
@property (nonatomic, copy) NSString *engineerSigFile;
@property (nonatomic, copy) NSString *engineerPhone;
@property (nonatomic, copy) NSString *engineerEmail;
@property (nonatomic, copy) NSString *engineerRegNo;



- (id)initWithUniqueId:(NSString *)AengineerID
          engineerName:(NSString *)AengineerName
       engineerSigFile:(NSString *)AengineerSigFile
         engineerPhone:(NSString *)AengineerPhone
         engineerEmail:(NSString *)AengineerEmail
         engineerRegNo:(NSString *)AengineerRegNo;

- (id) init;

@end


//  EngineerModel.m
#import "EngineerModel.h"

@interface EngineerModel ()

@end

@implementation EngineerModel

@synthesize engineerID, engineerName, engineerSigFile, engineerPhone, engineerEmail, engineerRegNo;

- (id)initWithUniqueId:(NSString *)AengineerID
          engineerName:(NSString *)AengineerName
       engineerSigFile:(NSString *)AengineerSigFile
         engineerPhone:(NSString *)AengineerPhone
         engineerEmail:(NSString *)AengineerEmail
         engineerRegNo:(NSString *)AengineerRegNo
{

    if ((self = [super init]))
    {
        self.engineerID = AengineerID;
        self.engineerName = AengineerName;
        self.engineerSigFile = AengineerSigFile;
        self.engineerPhone = AengineerPhone;
        self.engineerEmail = AengineerEmail;
        self.engineerRegNo = AengineerRegNo;

     }
    return self;
}

- (id) init {
    self = [super init];
    return self;
}

@end

最後に

他のリンカーフラグに-ObjCと-all_loadを追加しました

@synthesizeを追加しました(アークに必要だとは思いませんでしたか?)

単純化すると

- (id)initWithId:(NSString *)AengineerID
{
    NSLog(@"AengineerID %@",AengineerID);

    if ((self = [super init]))
    {
        self.engineerID = AengineerID;
    }
    return self;
} 

AengineerIDをトレースしてからクラッシュします

何か案は?

4

1 に答える 1

0

_isNaturallyRTLのプライベートメソッドNSStringです。したがって、どういうわけEngineerModelか、他のコードがを期待しているインスタンスがありますNSString

EngineerModelメソッドから返すオブジェクトの配列をどうしますreturnEngineersか?


そして、お勧めとして... sqlite3 C APIを自分で使用することは、フラストレーションの教訓です。代わりにFMDBのようなものを使用することを強くお勧めします。

于 2012-10-17T03:29:24.623 に答える