2016-08-20 2 views
0

В моем контроллере ViewController у меня есть функция для извлечения всех «заголовков рубрик» (атрибута словаря «Словарь»). Я понял, что это не хорошая практика MVC.MVC - NSFetchRequest в файле модели без UIKit

Итак, я создал новый быстрый файл. Я не импортировал UIKit. Youtube Stanford - Разработка IOS 9 Apps с Swift - 2, 22:53: "Никогда не импортировать UI KIT в файле модели, так как модель UI независимой"
(https://www.youtube.com/watch?v=j50mPzDMWVQ)

Однако, теперь я получаю эти сообщения как «Использование неразрешенного идентификатора« UIApplication »». Что имеет смысл, так как я не импортировал UIKit. Вопрос в следующем: как мне выполнить запрос на выборку в моем новом быстром файле.
(Как вы, наверное, сейчас, сейчас, я новичок)

import Foundation 
import CoreData 

class QueryData { 

private var selectedHeadingNumber:String = "-123456789" 
private var setOfHeadingNumbers:[String] = [String]() 

func getHeadingNumbers2() -> [String] { 


    if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext { 

     // Create Fetch Request 
     let fetchRequest = NSFetchRequest(entityName: "Vocabulary") 

     // Add Sort Descriptor 
     let sortDescriptor = NSSortDescriptor(key: "headingNumber", ascending: true) 
     fetchRequest.sortDescriptors = [sortDescriptor] 

     // Execute Fetch Request 
     do { 
      let result = try managedObjectContext.executeFetchRequest(fetchRequest) 

      for managedObject in result { 
       if let foundHeadingNumber = managedObject.valueForKey("headingNumber") { 

        if let result_number = foundHeadingNumber as? NSNumber 
        { 
         let result_string = "\(result_number)" 

         if !setOfHeadingNumbers.contains(result_string) { 
          print("Headingnumber: \(foundHeadingNumber) ") 
          setOfHeadingNumbers.append(result_string) 

          print("updated selectedHeadingNumber: ", selectedHeadingNumber) 
          selectedHeadingNumber = result_string 

          // set the default lessonnumber to the first lesson 
          if selectedHeadingNumber == "-123456789" { 
           selectedHeadingNumber = result_string 
           print("updated selectedHeadingNumber: ", selectedHeadingNumber) 
          } 
         } 

        } 

        //setOfHeadingNumbers.append(first) 
       } 
      } 

     } catch { 
      let fetchError = error as NSError 
      print(fetchError) 
     } 

    } // end of if statement 

    return setOfHeadingNumbers 

} // end of func 

} // end of class 
+0

Вы должны импортировать то, что вы используете. Я бы сказал, что код, который вы показали, не будет квалифицироваться как «класс модели». Он имеет пользовательские интерфейсы (или системы). – Eiko

ответ

1

Что вы на самом деле нужно NSManagedObjectContex. Передайте его в качестве аргумента метода:

func getHeadingNumbers2(inContext context: NSManagedObjectContext) -> [String] 
{ 
    ... 
} 

Или вводить его зависимость в инициализаторе

class QueryData 
{ 
    let context: NSManagedObjectContext 

    init(context: NSManagedObjectContext) 
    { 
     self.context = context 
    } 

    func getHeadingNumbers2() -> [String] 
    { 
     let fetchRequest = NSFetchRequest(entityName: "Vocabulary") 
     let result = try self.context.executeFetchRequest(fetchRequest) 
     ... 
    } 
} 
+0

«Ввести его как зависимость», похоже, в порядке (больше никаких восклицательных знаков). Благодарю. Теперь у меня проблема с возвратом в ViewController. Сначала прочитает больше документации. – Robert

Смежные вопросы