2013-03-02 15 views
10

Tôi có vấn đề với một dự án sqlite mà tôi đang làm, tôi đang sử dụng FMDB, tôi làm theo một ví dụ đơn giản, nhưng không hoạt động. Và tôi không thể tìm thấy lỗi. Tôi đã làm lược đồ cơ sở dữ liệu của tôi từ thiết bị đầu cuối, tôi đặt một số dữ liệu trên nó. Tôi rất mới để ios dev, vì vậy tôi không biết chính xác nếu tôi đã làm các bước ok. Đây là những gì tôi đã làm:FMDB ios không có bảng như vậy

1 - Tôi đã tạo lược đồ Cơ sở dữ liệu của mình và thêm một số trường. 2 - Tôi đã sao chép cơ sở dữ liệu.db vào thư mục dự án của tôi trong xcode. 3 - Tôi thêm các tập tin FMDB. 4 - Tôi thêm sqlite3.dylib 5 - Tôi đặt mã này:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.dbname = @"database.db"; 
    NSArray * docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * docDIr = [docPath objectAtIndex:0]; 
    self.dbpath = [docDIr stringByAppendingPathComponent:dbname]; 

    [self checkDB]; 

    [self getQ]; 

    return YES; 
} 
-(void) getQ 
{ 
    FMDatabase * db = [FMDatabase databaseWithPath:dbpath]; 
    [db open]; 

    FMResultSet * result = [db executeQuery:@"SELECT * FROM table1"]; 

    NSLog(@"last Error: %@",[db lastErrorMessage]); 
    NSLog(@"result: %@", result); 
} 
-(void) checkDB 
{ 
    BOOL success; 
    NSFileManager * fm = [NSFileManager defaultManager]; 
    success = [fm fileExistsAtPath:dbpath]; 
    NSError * error = [[NSError alloc] init]; 
    if (success) return; 
    NSLog(@"result:"); 
    NSString * dbPathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:self.dbname]; 

    [fm copyItemAtPath:dbPathFromApp toPath:dbpath error:&error];   
} 

Dường như cơ sở dữ liệu trống, vậy điều gì đã xảy ra? tại sao tôi không thể tìm thấy table1? Nếu tôi mở tập tin với bất kỳ gui sqlite nào, bảng sẽ xuất hiện tốt. Cảm ơn bất kỳ sự giúp đỡ Bảng điều khiển hiển thị cho tôi các dòng tiếp theo: 2013-03-02 14: 03: 31.839 myApp [21433: c07] Lỗi cuối cùng: không có bảng như vậy: table1 2013-03-02 14: 03: 31.841 myApp [21.433: C07] kết quả: (null)

Trả lời

24

Một vài suy nghĩ:

  1. tôi muốn khẳng định cơ sở dữ liệu đã được thêm vào gói của bạn. Chuyển đến cài đặt đích của bạn, chọn "Tạo giai đoạn", mở rộng "Sao chép tài nguyên gói" và đảm bảo cơ sở dữ liệu của bạn được liệt kê ở đó. Nếu không, hãy nhấp vào nút "+" và thêm nó.

    bundle

  2. Tôi sẽ đặt lại trình mô phỏng của bạn. Nếu bạn đã từng chạy ứng dụng và không sao chép cơ sở dữ liệu đúng cách, nó sẽ tạo ra một cơ sở dữ liệu trống cho bạn trong thư mục tài liệu của bạn. Bằng cách đặt lại trình mô phỏng, bạn có thể loại bỏ bất kỳ cơ sở dữ liệu trống nào có thể có ở đó.

  3. Nếu nó vẫn không hoạt động, tôi sẽ kiểm tra cơ sở dữ liệu gói trong trình mô phỏng của bạn. Điều hướng đến thư mục giả lập (~/Library/Application Support/iPhone Simulator), tìm ứng dụng, mở gói (bằng cách điều khiển nhấp vào ứng dụng và nói "hiển thị nội dung gói") và kiểm tra cơ sở dữ liệu trong đó chắc chắn nó có table1 của bạn.

+3

Cảm ơn bạn rất nhiều! đó là nó, bước 1 và 2 hoạt động hoàn hảo! Tôi quên một bước, lỗi newbie: D – Fede

+0

Điểm 2 của bạn là những gì tôi quên. Tôi đã không sao chép cơ sở dữ liệu từ gói vào thư mục tài liệu. – Suragch

+0

Cảm ơn bạn rất nhiều! ~ BướC# 1 là những gì tôi cần làm :) –

Các vấn đề liên quan