0

ここで問題があります。私のアプリはいくつかのオブジェクトをSQLiteデータベースに保存し、そのデータベースが私のUITableViewのソースです。実行時にデータベースに新しいオブジェクトを追加した場合を除いて、すべてが正常に機能します。UITableViewはそのコンテンツを更新しません。これが私のコードです:

- (void)viewDidLoad
{
    [self daten];
    [super viewDidLoad];
}

-(NSMutableArray *) daten{

if (daten)
    return daten;

    self.daten = [[NSMutableArray alloc] init];

@try {
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [self getDBPath];
    BOOL success = [fileMgr fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.", dbPath);
    }
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
    {
        NSLog(@"An error has occured: %s", sqlite3_errmsg(db));

    }


    const char *sql = "SELECT * FROM  Daten";
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with prepare statement:  %s", sqlite3_errmsg(db));
    }else{

        while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
            .......
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"Problem with prepare statement:  %s", sqlite3_errmsg(db));
}
@finally {
    sqlite3_finalize(sqlStatement);
    sqlite3_close(db);

    return daten;
}
}

問題はここにあると思います:

if (daten)
    return daten;

    self.daten = [[NSMutableArray alloc] init];

しかし、データベースが実行時に新しいオブジェクトを取得した場合、その時点で配列はnilではなく、新しいオブジェクトなしで返されます。

4

5 に答える 5

0

簡単です。追加するだけです:-

[tableView reloadData];
于 2012-12-03T14:58:20.763 に答える
0

UITableViewには、テーブルの行とセクションをリロードするreloadDataというメソッドがあります。

于 2012-12-03T14:58:50.363 に答える
0

テーブルビューでreloadDataを呼び出すことができます。

この質問は、 UITableViewリロードデータと重複しているようです。

于 2012-12-03T14:56:47.437 に答える
0

次のように呼び出す必要があります:[tableView reloadData]

于 2012-12-03T14:57:26.367 に答える
0

新しいレコードを挿入するプロセスは示されていませんが、リロードのためにデータに対処する必要がある場所です。その時点で daten を nil に設定したり、情報を配列に挿入したりしない場合、 reload の呼び出しは同じデータを受け取り、新しいものは何も表示されません。

daten は可変なので、新しい情報を挿入できます

[self.daten insertObject:myInfo atIndex:myIndex];

レコードを db に正常に挿入した後の手順:

* insert related info into your NSMutableArray.
* insert row into tableview or reload tableview.

または、daten を nil に設定して、元のメソッドから補充することもできます。

self.daten = nil;
[self.tableview reloadData];

tableview データソース メソッドが [self daten] に基づいて値を返すと仮定すると、次の呼び出しで配列が再作成されます。この場合、変更可能にする理由はありません。

さらに、viewDidLoad で [self daten] を呼び出す理由はありません。データソース メソッドが配列を要求すると、アクセサーに従って作成され、入力されます。

于 2012-12-03T15:05:08.117 に答える