Я выполняю ниже запрос с использованием FMDB, и он работал до iOS 8.2. Этот запрос был возвращен идеальным набором результатов в iOS 8.1 и старше. Но когда я устанавливаю приложение и отлаживаю тот же код в Xcode 6.2 и в iOS 8.2, компилятор застрял на sqlite3_step. У любого есть идея, почему это происходит. Ниже приведен запрос и код.sqlite3_step не работает в sqlite framework iOS 8.2
resultset = [manager420 selectFromTable:[NSString stringWithFormat:@"select Call_HDR.*, Problem.Machine, Problem.ServiceStatusFlag, AssignTech.RepName AS AssignTechName, DefaultTech.RepName AS DefaultTechName, Problem.ProblemDescription AS ProblemDescription, Problem.SLAHours AS SLAHours, ARComment.CustARComments As CustARComments, SLAResponseCode.SLAResponse As SLAResponse, ('E(' || IFNULL(Call_Status.ESum,0) || ') P(' || IFNULL(Call_Status.PSum,0) || ') O/P(' || IFNULL(Call_OPCount.RecordCount,0) || ')') AS EPO, (IFNULL(Call_Status.ECSum,0) || ' ' || IFNULL(Call_Status.PCSum,0)) AS EPC from CALL_HDR LEFT JOIN Branch_Reps as AssignTech ON CALL_HDR.RepID = AssignTech.RepID LEFT JOIN Branch_Reps as DefaultTech ON CALL_HDR.AssignedServiceRep = DefaultTech.RepID LEFT JOIN CALL_MACHINE as Problem ON CALL_HDR.CallNumber||'*001' = Problem.CallNumberWSeqnbr LEFT JOIN (Select Call_Machine.CallNumber, IFNULL(COUNT(CASE WHEN Call_Machine.EmergencyServicePerformed IN ('Y', 'C') THEN 1 END), 0) As ESum, IFNULL(COUNT(CASE WHEN Call_Machine.EmergencyServicePerformed = 'C' THEN 1 END), 0) As ECSum, IFNULL(COUNT(CASE WHEN Call_Machine.EmergencyServicePerformed NOT IN ('Y', 'C') THEN 1 END), 0) As PSum, IFNULL(COUNT(CASE WHEN Call_Machine.PMIAInspectionPerformed = 'Y' THEN 1 END), 0) As PCSum From Call_Machine Group By Call_Machine.CallNumber) As Call_Status ON CALL_HDR.CallNumber = Call_Status.CallNumber LEFT JOIN (SELECT COUNT(*) RecordCount,CC.CALLNumber FROM Machines M INNER JOIN Call_Hdr CC ON M.Location_ID = CC.LocationID WHERE M.Next_insp_Due_Date <> '' AND NOT EXISTS (Select Call_Machine.SNID from Call_Machine where Call_Machine.CallNumber = CC.CallNumber AND Call_Machine.SNID = M.Snrrn) GROUP BY CC.CallNumber) As Call_OPCount ON CALL_HDR.CallNumber = Call_OPCount.CallNumber LEFT JOIN Customers as ARComment ON CALL_HDR.LocationID = ARComment.LocationID LEFT JOIN NA_Data as SLAResponseCode ON CALL_HDR.CustomerTypeCode = SLAResponseCode.NationalAccountCode where CALL_HDR.CallStatus <> '%@' AND CALL_HDR.CallStatus <> '%@' %@",STATUS_CLOSED,STATUS_CANCELLED,temp_Query]];
while ([resultset next]) {
NSLog(@"result returned !!");
}
Компиляция stucked в следующем методе класса Resultset и не идти вперед от метода sqlite3_step.
- (BOOL) next {
int rc;
BOOL retry;
int numberOfRetries = 0;
do {
retry = NO;
rc = sqlite3_step(statement.statement);
if (SQLITE_BUSY == rc) {
// this will happen if the db is locked, like if we are doing an update or insert.
// in that case, retry the step... and maybe wait just 10 milliseconds.
retry = YES;
usleep(20);
if ([parentDB busyRetryTimeout] && (numberOfRetries++ > [parentDB busyRetryTimeout])) {
NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [parentDB databasePath]);
NSLog(@"Database busy");
break;
}
}
else if (SQLITE_DONE == rc || SQLITE_ROW == rc) {
// all is well, let's return.
}
else if (SQLITE_ERROR == rc) {
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
else if (SQLITE_MISUSE == rc) {
// uh oh.
NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
else {
// wtf?
NSLog(@"Unknown error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
break;
}
} while (retry);
if (rc != SQLITE_ROW) {
[self close];
}
return (rc == SQLITE_ROW);
}
Заранее спасибо.