iOS アプリで同期を行っています。ドキュメント フォルダにテーブル セットが既にあり、同期中にサーバーから新しいテーブル セットにデータをダウンロードしています。個々のテーブルの数を比較していますが、それらが同じ場合は、自然結合を使用して実際に同じであることを確認しています。それらが同じである場合、コンテンツは最新であり、現在のテーブル セットに変更を加える必要はありません。それ以外の場合は、新しいテーブル セットを取得し、新しいデータを現在のテーブルとして保存します。
問題は、特定のテーブルに対して自然結合を行うと、SQLITEMANAGER で両方のテーブルに同じ情報が表示されるにもかかわらず、自然結合が間違った答えを返すことです。理由がわからない。値が同じであっても、count_together は間違っています。
これは、チェックを実装する方法です(説明のためだけに):
singleton.table = YES;
int count_table1 = 0;
int count_table2 = 0;
int count_together = 0;
NSMutableArray *arrayTables = [[NSMutableArray alloc] initWithObjects:@"DATA",@"TABLE",@"NUMBERS",nil];
NSMutableArray *arrayTables2 = [[NSMutableArray alloc] initWithObjects:@"DATA2",@"TABLE2",@"NUMBERS2", nil];
for(int i =0; i<[arrayTables count]; i++)
{
count_table1 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables objectAtIndex:i]]];
count_table2 = [databaseManager checkCountOfTable:[NSString stringWithFormat:@"SELECT COUNT(*) FROM %@",[arrayTables2 objectAtIndex:i]]];
NSLog(@"Count of Table 1 is %i",count_table1);
NSLog(@"Count of Table 2 is %i",count_table2);
if (singleton.table == YES)
{
if(count_table1 != count_table2)
{
singleton.table = NO;
}
else
{
count_together = [databaseManager checkCountOfTable:[NSString stringWithFormat: @"SELECT COUNT(*) FROM (%@ NATURAL JOIN %@)",[arrayTables objectAtIndex:i],[arrayTables2 objectAtIndex:i]]];
NSLog(@"Count of Table 1 is %i",count_table1);
NSLog(@"Count of Tables Together is %i",count_together);
if (count_table1 == count_together)
{
singleton.table = YES;
}
else
{
singleton.table = NO;
}
}
}
}
いくつかのガイダンスが必要であり、提案を歓迎します。