2016-03-15 3 views
2

Помогите мне, ребята, со следующими тремя ошибками в SwiftCoreDataHelper.swift. Я использую xcode 7, но кажется, что код для более старых версий xcode. заранее спасибо.Ошибка SwiftCoreDataHelper.swift в xcode 7

1. , ,

line error: let items: NSArray = managedObjectContext.executeFetchRequest(<#T##request: NSFetchRequest##NSFetchRequest#>) error: Call can throw, but it is not marked with 'try' and the error is not handled

class func fetchEntities(className:NSString, withPredicate predicate:NSPredicate?, managedObjectContext:NSManagedObjectContext)->NSArray{ 
    let fetchRequest:NSFetchRequest = NSFetchRequest() 
    let entetyDescription:NSEntityDescription = NSEntityDescription.entityForName(className as String, inManagedObjectContext: managedObjectContext)! 

    fetchRequest.entity = entetyDescription 
    if predicate != nil { 
     fetchRequest.predicate = predicate! 
    } 

    fetchRequest.returnsObjectsAsFaults = false 
    let items: NSArray = managedObjectContext.executeFetchRequest(<#T##request: NSFetchRequest##NSFetchRequest#>) 

    return items 
} 

2. , ,

Ошибка линии: если managedObjectContext.save (ноль) {

error: Nil is not compatible with expected argument type '()'

class func saveManagedObjectContext(managedObjectContext:NSManagedObjectContext)->Bool{ 
    if managedObjectContext.save(nil) { 
     return true 
    } 
    else { 
     return false 
    } 
} 

3. , ,

line error: if storeCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error:&error) != nil {

error: Contextual type '[NSObject : AnyObject]' cannot be used with array literal

if storeCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error:&error) != nil { 

    if error != nil { 
     print(error!.localizedDescription) 
     abort() 
    } 
} 
+0

К сожалению. Новичок здесь. Благодар за исправление –

+0

Говорите четко _which строка_ каждого кода генерирует ошибку компилятора. – matt

+1

Оба * «Звонок может вызывать, но он не отмечен« try », и ошибка не обрабатывается» * и * «Nil несовместим с ожидаемым типом аргумента»() «» * указывает, что ваш код не адаптирован к ** новая обработка ошибок в Swift 2. ** Вы найдете много вопросов и ответов, связанных с этой темой, и, в частности, с первым сообщением об ошибке. Например: [Swift 2 (executeFetchRequest): обработка ошибок] (http://stackoverflow.com/questions/30954722/swift-2-executefetchrequest-error-handling). Я настоятельно рекомендую вам прочитать об обработке ошибок в текущей документации Swift. –

ответ

0
  1. Читайте о dotrythrow и catch. Если вызов выкидывает, вы должны заключить его в блок do и обрабатывать ошибку с помощью catch.
  2. Снимите ноль. Никаких аргументов не ожидается. Тогда вам придется обращаться с заброшенными ошибками.
  3. Не совсем уверен, что это за ошибка, но снова это требует преобразования в обработку ошибок Swift 2 и, вероятно, должно выглядеть примерно так. Обратите внимание, что аргумент ошибки стал брошенной ошибкой. Это непроверено без обещаний, что это абсолютно правильно.

    do { 
        let coordinator = try storeCoordinator.addPersistentStoreWithType(
         NSSQLiteStoreType, 
         configuration: nil, 
         URL: url, options: nil) 
    } catch { 
        print(error) 
        abort() 
    } 
    
+0

я уже сделай попробую бросить, но теперь моя ошибка является использованием неразрешенного идентификатора «пункты» вот мой код: –

+0

сделать { Пусть элементов = попробовать managedObjectContext.executeFetchRequest (fetchRequest) } поймать { печати («ошибку») } возвращенные детали } сделать { пусть элементы = попробовать managedObjectContext.executeFetchRequest (fetchRequest) } поймать { печать ("ошибка") } возвращенные предметы } –

+0

Элементы не входят в сферу применения, когда вы пытаетесь ее вернуть. Замените 'let items =' на 'return', и вы, вероятно, захотите вернуть ниль или [] из блока catch. –

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