Я довольно новичок в Objective C, и даже новичок в использовании SQL внутри моих приложений.Я пытаюсь получить текущий счетчик состояния элементов в моей базе данных.Если вы можете себе представить приложение типа todo, с количеством элементов в каждой категории.Приведенный ниже метод сначала извлекает общее количество элементов в категории, затем просматривает каждую категорию и определяет, какие из них имеют значение «Да» (как в случае «Да», оно проверяется / завершается).Код работает, но я привязал его к UIButton, поэтому при нажатии кнопки вызывается метод, описанный ниже, а также UIPopover, который отображает данные.Когда кнопка UIB нажимается первые несколько раз, она очень отзывчива и немедленно открывает UIPopover, однако, когда он нажимается много раз, он замедляется, в конечном счете, для открытия требуется секунда или две.Я хочу знать лучший способ сделать это правильно, не перегружая память и не отвечая на все вопросы.Я, должно быть, делаю что-то совершенно не так, поскольку это становится все более и более вялым, когда вы нажимаете кнопку, чтобы открыть поповер.Буду очень признателен за любые идеи или предложения.
-(void)doCount{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"ListDatabase.sql"];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
for (NSString *element in self.countArray){
NSString *retrieveValue = [prefs objectForKey:@"selectedList"];
const char *sql = [[NSString stringWithFormat:@"SELECT COUNT(itemCategory)FROM '%@' WHERE itemCategory='%@'",retrieveValue,element]UTF8String];
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
int totalcount = sqlite3_column_int(selectstmt,0);
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:totalcount forKey:@"count"];
}
const char *sql = [[NSString stringWithFormat:@"SELECT COUNT(itemDone)FROM '%@' WHERE itemDone='Yes' AND itemCategory ='%@'",retrieveValue,element]UTF8String];
sqlite3_stmt *getcountstmt;
if(sqlite3_prepare_v2(database, sql, -1, &getcountstmt, NULL) == SQLITE_OK) {
while(sqlite3_step(getcountstmt) == SQLITE_ROW) {
int count = sqlite3_column_int(getcountstmt,0);
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int totalcount = [prefs integerForKey:@"count"];
NSString *catCount = [NSString stringWithFormat: @"%i/%i",count,totalcount];
[prefs setObject:catCount forKey:element];
}
}
sqlite3_finalize(selectstmt);
sqlite3_finalize(getcountstmt);
}
}
}
sqlite3_close(database);
//[self getFinishedItems];
}