«нераспознанный селектор отправлен в экземпляр» при получении данных sqlite - PullRequest
1 голос
/ 08 апреля 2011

Я получаю эту ошибку и не знаю, как ее исправить.Я новичок в программировании для iOS.

Надеюсь, приведенных ниже кодов достаточно, чтобы понять, в чем проблема.

Вот мой ListTableController.m


...
@implementation ListTableController

@synthesize listTableView;
@synthesize detailController;
@synthesize listOfTasks;
@synthesize title, note, date;

-(id)initWithTitle:(NSString *)sTitle note:(NSString *)sNote date:(NSString *)sDate {
    NSLog(@"FUNC: %s",__FUNCTION__);
    self.title = sTitle;
    self.note = sNote;
    self.date = sDate;
    return self;
}

// Retrieve records
-(void) getAllRowsFromTableNamed: (NSString *) tableName { 

    //---retrieve rows--- 
    NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE status = '1' ORDER BY date ASC",tableName]; sqlite3_stmt *statement;
    //---initialize the array--- 
    listOfTasks = [[NSMutableArray alloc] init];

    if (sqlite3_prepare_v2( db, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK) { 
        while (sqlite3_step(statement) == SQLITE_ROW) {
            NSString *fieldTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
            NSString *fieldNote = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];
            NSString *fieldDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];

            // Create a new object with the data from the database
            NSString *str = [[NSString alloc] initWithTitle :fieldTitle note:fieldNote date:fieldDate];
            [listOfTasks addObject:str];            
            [str release];
            [fieldTitle release]; 
            [fieldNote release]; 
            [fieldDate release];        
        }
        //---deletes the compiled statement from memory---
        sqlite3_finalize(statement);
    }
}
...

Вот мой ListTableController.h


#import 
#import "sqlite3.h"
#import "TaskDetailController.h"

@interface ListTableController : UITableViewController {
    IBOutlet UITableView *listTableView;
    sqlite3 *db;
    TaskDetailController *detailController;

}
NSString *title;
NSString *note;
NSString *date;
NSMutableArray * listOfTasks;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *note;
@property (nonatomic, retain) NSString *date;
@property (nonatomic, retain) TaskDetailController *detailController;
@property (nonatomic, retain) IBOutlet UITableView *listTableView;
@property (nonatomic, retain) NSMutableArray *listOfTasks;

-(void) copyDatabaseIfNeeded;
-(NSString *) filePath; 
-(IBAction)addCalendar;
-(NSInteger)countToday;
-(id)initWithTitle:(NSString *)sTitle note:(NSString *)sNote date:(NSString *)sDate;

@end

А это журнал ошибок с консоли :


*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSPlaceholderString initWithTitle:note:date:]: unrecognized selector sent to instance 0x4e00470'

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Попробуйте удалить эти строки.

[fieldTitle release]; [fieldNote release]; [fieldDate release];

А если вы хотите объединить заголовок, заметку и дату в одну строку.

тогда попробуйте это

// Создать новый объект с данными из базы данных NSString * str = [[NSString stringWithFormate: @ "% @% @% @", fieldTitle, fieldNote, fieldDate];

вместо

// Создать новый объект с данными из базы данных NSString * str = [[NSString alloc] initWithTitle: fieldTitle note: fieldNote date: fieldDate];

0 голосов
/ 08 апреля 2011

Попробуйте удалить эти строки.Методы класса as [NSString stringWith .... возвращают автоматически освобожденные объекты.

[fieldTitle release]; 
[fieldNote release]; 
[fieldDate release]; 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...