2016-10-16 4 views
0

스위프트 3에서 FMDB를 사용하고 있습니다. 스위프트 2에서는 모든 것이 잘 작동했지만 스위프트 업그레이드 후에는 "명령이 신호로 인해 실패했습니다 : 9 "FMDB, Swift 3, executeUpdate - 컴파일러 빌드 실패

그 원인을 조사한 결과, ArgumentsArray에서 약 24 개의 인수로"executeUpdate "를 수행하면 컴파일러가 매우 느려지고 결국 컴파일 오류가 발생 함을 발견했습니다.

배열의 인수 개수를 20 개로 줄이면 컴파일러 빌드가 여전히 느리지 만 성공적으로 완료됩니다.

이유가 무엇인지/도움을 환영합니다 ...!

여기 내 코드입니다 :

func insertLocalization(_ localization: Localization) -> Bool { 
     print ("Insert Localization: \(localization.localization_object_id!)#\(localization.spot_object_id!)#\(localization.language_code!)") 
     sharedInstance.database!.open() 
     let isInserted = sharedInstance.database!.executeUpdate(
      "INSERT INTO localizations (" + 
       "localization_object_id, " + 
       "spot_object_id, " + 
       "language_code, " + 
       "current_location_enabled, " + 
       "spot_title, " + 
       "spot_desc, " + 
       "local_assistant_phone, " + 
       "orientation_360_enabled, " + 
       "direction_n_title, " + 
       "direction_n_desc, " + 
       "direction_ne_title, " + 
       "direction_ne_desc, " + 
       "direction_e_title, " + 
       "direction_e_desc," + 
       "direction_se_title, " + 
       "direction_se_desc, " + 
       "direction_s_title, " + 
       "direction_s_desc, " + 
       "direction_sw_title, " + 
       "direction_sw_desc, " + 
       "direction_w_title, " + 
       "direction_w_desc, " + 
       "direction_nw_title, " + 
       "direction_nw_desc) " + 
      "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 
      withArgumentsIn: [ 
       // localization.localization_object_id!, 
       // localization.spot_object_id!, 
       // localization.language_code!, 
       // localization.current_location_enabled!, 
       localization.spot_title!, 
       localization.spot_desc!, 
       localization.local_assistant_phone!, 
       localization.orientation_360_enabled!, 
       localization.direction_n_title!, 
       localization.direction_n_desc!, 
       localization.direction_ne_title!, 
       localization.direction_ne_desc!, 
       localization.direction_e_title!, 
       localization.direction_e_desc!, 
       localization.direction_se_title!, 
       localization.direction_se_desc!, 
       localization.direction_s_title!, 
       localization.direction_s_desc!, 
       localization.direction_sw_title!, 
       localization.direction_sw_desc!, 
       localization.direction_w_title!, 
       localization.direction_w_desc!, 
       localization.direction_nw_title!, 
       localization.direction_nw_desc! 
      ]) 
     sharedInstance.database!.close() 
     return isInserted 
    } 

감사합니다. (성공 빌드가 있지만, 컴파일 빌드가 실패하게됩니다 아래의 4 개 라인의 주석을 다른 4 개 라인은 물론 같은 결과를해야합니다)!

답변

0

이 코드는 Xcode 8.0 (8A218a)에서 나에게 무의미하게 컴파일됩니다. 이 당신을 위해 작동하지 않는 경우, 나는 나의 현재 임시 방편이이 작업을 처음 을로 분할했다 :( 도움이되지 않았다 불행하게도 예를

let values = [localization.localization_object_id!, ..., localization.direction_nw_desc!] 

let isInserted = sharedInstance.database!.executeUpdate(
    "INSERT INTO localizations (...) " + 
    "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 
    withArgumentsIn: values) 
+0

에 대한 라인업을 분할 좋을 것 : INSERT the – Gilu

+0

불행히도 도움이되지 않았다. (현재 임시 해결책은 INSERT 연산을 2 개의 연산으로 나눈다. 첫 번째는 처음 8 개 컬럼을 INSERT하고 마지막 16 개 컬럼은 삽입 된 레코드를 UP한다. 내 의견을위한 해결책. – Gilu