-[NSDictionary initWithObjects:forKeys:]: count of objects (0) differs from count of keys (2)

ios, nsdictionary, objective-c, plist

Solution

`morningtime1` is almost certainly `nil` here, prematurely ending the array list.

If you used the new array literal syntax here:

@[morningtime1, afternoontime1];

you would get a crash, because it's illegal to assign nil to an `NSArray` element.

Problem

I am getting the error of -[NSDictionary initWithObjects:forKeys:]: count of objects (0) differs from count of keys (2)' here is my code in saving the plist. ``` @interface setting : UIViewController{ UIDatePicker *datePicker; IBOutlet UILabel * morningtime; UIDatePicker *afternoonpicker; NSString*morningtime1; NSString*afternoontime1; IBOutlet UILabel *afternoontime; } @property (nonatomic,retain) IBOutlet UIDatePicker *datePicker; @property (strong, nonatomic) IBOutlet UIDatePicker *afternoonpicker; @property (nonatomic, retain) IBOutlet NSString *morningtime1; @property (nonatomic, retain) IBOutlet NSString *afternoontime1; @property (nonatomic, retain) IBOutlet UILabel *morningtime; @property (nonatomic, retain) IBOutlet UILabel *afternoontime; @property (weak, nonatomic) IBOutlet UIButton *morning; - (IBAction)savetext:(id)sender { NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); // get documents path NSString *documentsPath = [paths objectAtIndex:0]; // get the path to our Data/plist file NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"]; self.morningtime1 = morningtime.text; self.afternoontime1 = afternoontime.text; NSDictionary *plistDict = [NSDictionary dictionaryWithObjects: [NSArray arrayWithObjects: morningtime1, afternoontime1, nil] forKeys:[NSArray arrayWithObjects: @"Morning", @"Afternoon", nil]]; NSString *error = nil; // create NSData from dictionary NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; // check is plistData exists if(plistData) { // write plistData to our Data.plist file [plistData writeToFile:plistPath atomically:YES]; } else { NSLog(@"Error in saveData: %@", error); } } ```

Original source