2016-11-03 16 views
0

私はSwiftプロジェクトを最新のSwiftバージョンに移行しようとしています。Swift 2.3からSwift 3への移行エラーメッセージ

fileprivate lazy var _uploadedSurveysController: NSFetchedResultsController? = nil 

このコード行では、次のエラーが発生します。

Nil cannot initialize the specified type NSFetchedResultsController? 

Xcodeには、NSFetchedResultsControllerの隣に別の疑問符が追加されるという修正勧告が出ています。私が「はい」と答えると、同じエラーが発生し、別の疑問符を追加する修正が出てきます。

は、ここでより多くのコード

fileprivate var uploadedSurveysController: NSFetchedResultsController { 
guard _uploadedSurveysController == nil else { return _uploadedSurveysController! } 

_uploadedSurveysController = NSFetchedResultsController(fetchRequest:  coreDataHelper.mailedAssetsFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: "section2Identifier", cacheName: nil) 

do { 
    try _uploadedSurveysController!.performFetch() 
} catch let error as NSError { Logger.sharedInstance.logMessage("\(#function)  Uploaded Surveys Fetching Error: \(error.userInfo)") } 

return _uploadedSurveysController! 
} 

すべてのヘルプは本当にいただければ幸いです。

あなたに知らせてください。私はSwiftには本当に新しく、既存のプロジェクトをSwift 2.3から3に更新しようとしています。

ありがとうございます。 Remzi。

+0

でスウィフトで怠惰なインスタンス化に適切な説明を見つけたスウィフト3でNSFe​​tchedResultsController'は現在、ジェネリック型宣言が必要です。 '_uploadedSurveysController'が使用されているところでさらにコードを含めることはできますか? ( 'nilでない 'として初期化されています) – Danoram

+0

あなたの変数はすでにオプションで、nilなのではないので、' = nil 'を削除してみてください。使用するときはいつでもこのコントローラを使用する前にnilをチェックします。 –

+0

こんにちはAnni、私は '= nil'を出しましたが、何もしませんでした。違うエラーが出てきました。 – rsimsek

答えて

0

ここにコードがあります。

fileprivate var uploadedSurveysController: NSFetchedResultsController { 
guard _uploadedSurveysController == nil else { return _uploadedSurveysController! } 

_uploadedSurveysController = NSFetchedResultsController(fetchRequest: coreDataHelper.mailedAssetsFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: "section2Identifier", cacheName: nil) 

do { 
    try _uploadedSurveysController!.performFetch() 
} catch let error as NSError { Logger.sharedInstance.logMessage("\(#function) Uploaded Surveys Fetching Error: \(error.userInfo)") } 

return _uploadedSurveysController! 

}

+0

この情報を追加するには、元の質問を編集する必要があります。 – Stephen

0

私はそれがあるため、標準のプロパティとは異なるルールに従うlazy指定、のだと思います。あなた自身で既に遅延インスタンス化を実装しているので、lazyキーワードは不要です(とにかくこの方法での使用を意図していません)。それを削除し、それが動作するかどうかを確認してください。

+0

こんにちはボブ、私はそれを試みたが、まだ同じエラーのようです。 Xcodeはそれを修正するために別の疑問符を追加します。 – rsimsek

+0

ところで、私はちょうど怠け者を取り除いたが、 '= nil'は残した。 – rsimsek

1

Swift 2プロジェクトをSwift 3にアップグレードした後も同じエラーメッセージが表示されました。Swiftではレイジーインスタンシエーションが簡単になり、隠された_variableNameプロパティは必要ありません。

lazy属性を追加すると、プロパティ定義でプロパティをnilに設定する必要がある場合に、それを初期化するために実行する関数ブロックを指定できます。

fileprivate lazy var uploadedSurveysController: NSFetchedResultsController<NSFetchRequestResult> = { 

    var fetchRequest<NSFetchRequestResult> = NSFetchedResultsController(fetchRequest: coreDataHelper.mailedAssetsFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: "section2Identifier", cacheName: nil) 

    do { 
     try fetchedResultsController.performFetch() 
    } catch let error as NSError { Logger.sharedInstance.logMessage("\(#function)  Uploaded Surveys Fetching Error: \(error.userInfo)") } 

    return fetchedResultsContoller 
}() 

私は `a blog entry by Mike Buss

関連する問題