Палец вверх 0
Перевод
Перевод

setEnabled для segmentedControl вызывает другие методы в iOS 4

Я готовлю свое приложение к совместимости с iOS 4, и у меня возникла проблема, заключающаяся в том, что по какой-то странной причине включение индекса 0 моего segmentedControl заставляет код вызывать метод openDatabase и метод closeDatabase. Я отлаживал весь код и выяснил, что как только segmentedControl включен, эти два метода вызываются.

Вот выдержка из журнала:

> 2012-04-17 17:20:59.294 Abiliator[27897:11003] viewWillAppear - before database open
2012-04-17 17:20:59.296 Abiliator[27897:11003] OpenDatabase
2012-04-17 17:20:59.297 Abiliator[27897:11003] viewWillAppear - loadAppSettings
2012-04-17 17:20:59.311 Abiliator[27897:11003] viewWillAppear - getCurrentLearningSubject
2012-04-17 17:20:59.340 Abiliator[27897:11003] viewWillAppear - switchLearningBoxControl
2012-04-17 17:20:59.341 Abiliator[27897:11003] Inside switchLearningBoxControl
**2012-04-17 17:20:59.394 Abiliator[27897:11003] OpenDatabase
2012-04-17 17:21:00.566 Abiliator[27897:11003] CloseDatabase**
2012-04-17 17:21:00.567 Abiliator[27897:11003] Method abiliatorViewController - Function switchLearningBoxControl: Error preparing the statement 'library routine called out of sequence'.
2012-04-17 17:21:00.568 Abiliator[27897:11003] Method abiliatorViewController - Function switchLearningBoxControl: Error preparing the statement 'library routine called out of sequence'.
2012-04-17 17:21:00.569 Abiliator[27897:11003] Method abiliatorViewController - Function switchLearningBoxControl: Error preparing the statement 'library routine called out of sequence'.
2012-04-17 17:21:00.570 Abiliator[27897:11003] Method abiliatorViewController - Function switchLearningBoxControl: Error preparing the statement 'library routine called out of sequence'.
2012-04-17 17:21:00.570 Abiliator[27897:11003] Finished switchLearningBoxControl
2012-04-17 17:21:00.571 Abiliator[27897:11003] viewWillAppear - getQuestionFromDB
2012-04-17 17:21:00.572 Abiliator[27897:11003] CloseDatabase
2012-04-17 17:21:00.572 Abiliator[27897:11003] Failed to close the database with message 'library routine called out of sequence'.

Вы видите два последовательных вызова методов открытия и закрытия базы данных. Однако они явно не вызываются моим кодом, а какой-то «призрачный» процесс выполняет эту часть кода.

Тот же самый код работает на iOS 5 просто отлично, никаких проблем, ни в Simulator, ни на устройстве.

Есть идеи, в чем проблема? Благодарю.

- (void) switchLearningBoxControl:(NSString *) mySubjectID {
const char *sql = "select count (*) from ABILIATOR_CARD where learningbox = ? and subject_id = ?";
for (NSInteger mySegment=0;mySegment < 5;mySegment++) {
    sqlite3_stmt *selectstmt;

    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
        sqlite3_bind_int(selectstmt, 1, mySegment+1);
        sqlite3_bind_text(selectstmt, 2, [mySubjectID UTF8String], -1, SQLITE_TRANSIENT);
        if (sqlite3_step(selectstmt) == SQLITE_ROW) {
            int count = sqlite3_column_int(selectstmt, 0);
            if (count < 1) {
                [self.learningBoxControl setEnabled:NO forSegmentAtIndex:mySegment];
            }
            else {
                [self.learningBoxControl setEnabled:YES forSegmentAtIndex:mySegment];
            }
        }
        else {
            [self.learningBoxControl setEnabled:NO forSegmentAtIndex:mySegment];
        }

    }
    else {
        NSLog(@"Method abiliatorViewController - Function switchLearningBoxControl: Error preparing the statement '%s'.", sqlite3_errmsg(database));
    }
    sqlite3_finalize(selectstmt);   
}
}
iphone ios4 uisegmentedcontrol
задан renesteg 17 апр. 2012 г., 19:44:21
источник

1 ответ

Решение 0
Перевод
Перевод

в iOS 4 setEnabled вызывает IBAction, iOS 5 - нет. У меня есть еще одно открытие в этом IBAction, которое, конечно, смущает приложение :-) Не знал об этом изменении, так как я прочитал документ и не видел таких изменений между 4 и 5.

ответ дан renesteg 1 июн. 2012 г., 14:01:57
источник