On a totally different side note, I'd like to point out to you that you can change this
if([[[defaults dictionaryRepresentation] allKeys] containsObject:@"toDoItems"]){
NSLog(@"toDoItems found");
self.toDoItems = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"toDoItems"]];
} else {
self.toDoItems = [[NSMutableArray alloc] init];
}
To that
self.toDoItems = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"toDoItems"]];
Because if you try to get an object that is not set from user defaults (or any dictionary), you get nil back. And if you init your mutable array with a nil array you will have a valid, yet empty, mutable array.
Since it didn't fit as a comment I wrote it as an answer, though of course it has nothing to do with your original problem