ios 에서 FMDB 를 사용 하 는 몇 가지 작은 문제
2228 단어 iosexc_bad_accessFMDB
값 이 null 인 열 처리
먼저 resultDictionary 방법 을 통 해 ResultSet 을 NSDictionary 로 변환 합 니 다.
FMResultSet *rs = [db executeQuery:sql];
while ([rs next]) {
[result addObject:[rs resultDictionary]];
}
그리고 object ForKey 로 열 값 을 추출 합 니 다.이 열 이 비어 있 으 면 NSNull 로 되 돌아 갑 니 다.그러나 비어 있 지 않 은 것 으로 판단 할 때 오류 가 발생 했 습 니 다.
NSString* originFilePath = [row objectForKey:columnName];//
if (originFilePath){
//
}
위의 코드 가 틀 렸 습 니 다.이 열 이 비어 있어 도 비어 있 지 않 은 분기 로 들 어 갑 니 다.다음 코드 로:
NSString* originFilePath = [row objectForKey:columnName];//
if ((NSNull *)originFilePath != [NSNull null]){
//
}
SQL 을 연결 할 때 표 이름 은 변수 일 수 없습니다.
간단 한 전체 표 조 회 를 하고 결 과 를 0 row 로 되 돌려 주 었 습 니 다.마지막 으로 표 이름 이 변수 가 될 수 없 음 을 발 견 했 습 니 다.다음 두 가지 쓰기 가 모두 틀 렸 습 니 다.
FMResultSet *rs = [db executeQuery:@"select * from %@", tableName];
FMResultSet *rs = [db executeQuery:@"select * from ?", tableName];
조회 매개 변 수 는 변수 일 수 있 습 니 다.그리고 매개 변 수 를 연결 할 수 있 습 니 다.그러나 표 이름 은 상수 여야 하기 때문에 이렇게 써 야 합 니 다.
NSString *sql = [NSString stringWithFormat:@"select * from %@", tableName];
FMResultSet *rs = [db executeQuery:sql];
먼저 sql 을 미리 맞 추고 executeQuery 방법 에 전달 하 는 것 은 상수 입 니 다.
executeQuery 나 executeUpdate 에 전 달 된 인 자 는 NSObject 여야 합 니 다.
SQL 을 실행 할 때 FMDB 는 EXC 를 보고 합 니 다.BAD_ACCESS,응용 프로그램 충돌.stackoverflow 에서 execute 방법 에 전 달 된 인 자 는 NSObject 여야 합 니 다.int,long 등 원본 데이터 형식 이 라면 Wrapper 류 로 포장 해 야 합 니 다.다음 코드 가 잘못 되 었 습 니 다.
FMResultSet *rs = [db executeQuery:sql, latestBackupTime, now];// latestBackupTime now long , EXC_BAD_ACCESS
다음 으로 써 야 합 니 다:
long now = [[NSDate date] timeIntervalSince1970];
// executeQuery() NSObject, , EXC_BAD_ACCESS
FMResultSet *rs = [db executeQuery:sql, [NSNumber numberWithLong:latestBackupTime], [NSNumber numberWithLong:now]];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.