2

したがって、私のコードは、データベースとテーブルを作成し、位置データをテーブルに保存することを想定しています。「作成されたテーブル」や「挿入された場所」など、私が作成したすべての適切なログにヒットしていますが、ファイルを見つけようとすると、(a)そこにないか、(b)そこにあるが場所データがありません。

最初は CoreData を使用していましたが、すぐに悪夢に変わったので、直接 sqlite を使用するように変更しました。

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {

        locationManager =[[CLLocationManager alloc] init];

        locationManager.delegate = self; 
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        locationManager.distanceFilter = 10;
        [locationManager startUpdatingLocation]; 



// Create a string containing the full path to the bold2.db inside the documents folder
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"bold2.sql"];

    // Check to see if the database file already exists
    bool databaseAlreadyExists = [[NSFileManager defaultManager] fileExistsAtPath:databasePath];

    // Open the database and store the handle as a data member
    if (sqlite3_open([databasePath UTF8String], &databasehandle) == SQLITE_OK)
    {
        // Create the database if it doesn't yet exists in the file system
        if (!databaseAlreadyExists)
        {
            // Create the LOCATION table
            const char *sqlStatement = "CREATE TABLE IF NOT EXISTS LOCATION (ID INTEGER PRIMARY KEY AUTOINCREMENT, latitude DOUBLE, longitude DOUBLE, timeStamp DATE)";
            char *error;
            if (sqlite3_exec(databasehandle, sqlStatement, NULL, NULL, &error) == SQLITE_OK)
          {
                NSLog(@"Created Table");
                 }
              }

これは、新しい場所を取得してデータベースに挿入する場所のデリゲートです。奇妙なことは、実際に「場所が挿入されました」というログにヒットすることです。

    -(void) locationManager: (CLLocationManager *) manager
    didUpdateToLocation: (CLLocation *) newLocation
           fromLocation: (CLLocation *) oldLocation
{

    NSString *insertStatement = [NSString stringWithFormat:@"INSERT INTO location (latitude, longitude, timeStamp) VALUES (%g, %g, %g)",newLocation.coordinate.latitude, newLocation.coordinate.longitude, newLocation.timestamp];    
    char *error;   
    if ( sqlite3_exec(databasehandle, [insertStatement UTF8String], NULL, NULL, &error) == SQLITE_OK)
    {
        NSLog(@"Location inserted. %g", newLocation.coordinate.latitude);
    }    

    else NSLog(@"Error: %s", error);
}
4

1 に答える 1

0

私はそれを解決しました。私はミニマックにリモートしているので、データベースへのファイルパスは隠されていました。go to folderに正しいファイルパスを貼り付けて、正しいファイルを見つけました。

于 2012-04-23T21:21:44.953 に答える