2017-08-08 87 views
2

我正在製作一個文字遊戲,並使用sqlite數據庫捆綁了一個完整的英文單詞列表。我試圖找到最好的方式來搜索數據庫的給定字符串,以確定它是否是一個字。更好的方法來快速查詢sqlite數據庫

在這一點上,我可以得到整個數據庫進行到一個數組:

func fetchWords() { 
    if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext { 

     let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord") 

     do { 
      englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord] 

      print(englishWords[123323].word) 
      //Prints "injustices" 

      } catch { 
       //error handling 
      } 
     } 
    } 

現在。我真正想做的是傳入一個給定的字符串,看看它是否作爲我的數據庫中的單詞存在。我有謂詞笨重的解決方案,例如:

func fetchWordsToArray() { 
     if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext { 

      let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord") 

      let searchWord = ["dastardly"] 
      let searchPredicate = NSPredicate(format: "word = %@", argumentArray: searchWord) 

      do { 
       englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord] 

       let resultFilteredByPredicate = (englishWords as NSArray).filtered(using: predicate) 
       print(resultFilteredByPredicate) 

      } catch { 
       //error handling 
      } 
     } 

    } 

但爲了使用過濾功能,我要轉換爲一個NSArray這意味着我不能直接與工作成果(如獲得resultFilteredByPredicate.word) 。

此外,感覺就像我可能會用這種錯誤的方式去做。由於首先必須進入數組,所以我必須首先喪失使用sqlite數據庫的許多價值。

任何建議的方法,以更好地使用數據庫?

非常感謝您的幫助!

+1

根據您發佈的代碼,這ISN對於SQLite的問題,這是一個核心數據問題。 – rmaddy

+0

有道理。只需將核心數據添加爲標籤即可。謝謝 – enesefuu

回答

1

爲了使數據庫做過濾(然後可以使用索引自動優化),put a predicate on the original fetch request

let formatRequest : NSFetchRequest<Word> = Word.fetchRequest() 
    fetchRequest.predicate = NSPredicate(format: "word == %@", searchWord) 
    let fetchedResults = try context.fetch(fetchRequest) as! [Word] 

但是核心數據是管理你的對象的框架。 如果您認爲你的話是不是對象,但只值,你可以與直接做SQL一些其他庫替換核心數據,並執行一個SQL查詢,而不是:

SELECT * FROM EnglishWord WHERE word = ? 
+0

嘿謝謝你的迴應CL。我把這個放在心上「但是Core Data是一個管理對象的框架,如果你決定你的單詞不是對象而只是數值,你可以用一些其他直接執行SQL的庫來替換Core Data」,最後使用SQLite。迅速,感覺更適合我的需求。再次感謝! – enesefuu