Что вызывает это? - PullRequest
       2

Что вызывает это?

0 голосов
/ 10 марта 2011

Я не понимаю, "почему" SQLiteDB может не отвечать на "-checkIfDatabaseExists". Что вызывает это и как я могу это исправить? (Я очень близок к тому, чтобы заставить это работать, но поскольку я новичок, у меня все еще есть проблемы).

Я ценю любую помощь, которую я могу получить в этом. Вот код:

#import "SQLiteDB.h"

static SQLiteDB *sharedSQLiteDB = nil;  //  makes this a singleton class

@implementation SQLiteDB

@synthesize db, dbPath, databaseKey;


//--------------    check for database or create it    ----------------|
#pragma mark Singleton Methods

+ (SQLiteDB *) sharedSQLiteDB  {

    if(!sharedSQLiteDB)  {
        sharedSQLiteDB = [[SQLiteDB alloc] init];
        [sharedSQLiteDB checkIfDatabaseExists];
    }
    return sharedSQLiteDB;
}   

+(id)allocWithZone:(NSZone *)zone  {
    if(!sharedSQLiteDB)  {
        sharedSQLiteDB = [super allocWithZone:zone];
        return  sharedSQLiteDB;
    }
    else {
        return nil;
    }
}   

-(id)copyWithZone:(NSZone *)zone  {
    return self;
}

-(void) release  {
    //  no-op
}


- (void) checkIfDatabaseExists  {
    // Get the path to the database file
    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentPath = [searchPaths objectAtIndex:0];
    NSString *databasePath = [documentPath stringByAppendingPathComponent:@"ppcipher.s3db"];

    // Open the database file
    const char *cDatabasePath = [databasePath cStringUsingEncoding:NSUTF8StringEncoding];
    if(sqlite3_open(cDatabasePath, &db) == SQLITE_OK)  //  does it exist?
        return;
    else {  //  create database file here

    }

}
@end

Here is the results of the build:

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Когда у вас есть:

- (void) foo
{
   [self bar];
}

- (void) bar
{ ... }

Компилятор не видел определения -bar при компиляции -foo и, таким образом, предупредит, что self может не отвечать на -barпри компиляции -foo.

Если этот метод предназначен быть полностью закрытым для класса, сделайте это в верхней части файла .m:

@interface Foo()
- (void) bar;
@end

Если он предназначен для вызова другими классами, добавьте объявление метода к @interface.

0 голосов
/ 10 марта 2011

Я не на 100% уверен в том, что вы реализовали здесь, но из того, что я могу сказать, ваш заголовок определил + checkIfDatabaseExists как метод класса (хотя вы еще не реализовали его, поэтому "неполная реализация"предупреждения "и" определение метода не найдено ".Однако в вашем методе sharedSQLiteDB вы вызываете -checkIfDatabaseExists для экземпляра SQLiteDB, который ссылается на метод экземпляра, который вы не определили.

Редактировать: Хорошо, после просмотра полного кода мой ответ выше очевидноне тот случай.Но как выглядит ваш заголовок?Есть ли у вас знак «+» вместо «-» перед сигнатурой checkIfDatabaseExists?

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