Reputation: 27114
I have an init
call that either lazy loads my seed data, or loads data that exists in my database :
if let savedPages = loadPages() {
pages += savedPages
} else {
createPages()
}
my createPages()
method is not being called because loadPages()
is at the very least returning 0 Results
.
func loadPages() -> [NSManagedObject]? {
// Load all those pages!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
do {
let results = try managedContext.executeFetchRequest(fetchRequest)
return results as? [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
return nil
}
How can I make my else statement
catch so that createPages()
is called?
Upvotes: 0
Views: 69
Reputation: 10195
You could add a where
clause:
if let savedPages = loadPages() where savedPages.count > 0 {
pages += savedPages
}
else {
createPages()
}
Upvotes: 0
Reputation: 8391
Option 1:
Add a return in loadPages()
if results.count == 0 { return nil }
func loadPages() -> [NSManagedObject]? {
// Load all those pages!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
do {
let results = try managedContext.executeFetchRequest(fetchRequest)
///
if results.count == 0 { return nil }
///
return results as? [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
return nil
}
Option 2:
Add where
after if let
if let savedPages = loadPages() where savedPages.count > 0 {
pages += savedPages
} else {
createPages()
}
Upvotes: 2