Объект, который вы сохраняете по умолчанию для пользователя (и все его дочерние элементы), должен иметь тип объекта plist или, другими словами, NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.
Недавно я сделал что-то похожее на это, что включает в себя такой код для хранения элемента:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:appSettings];
[prefs setObject:myEncodedObject forKey:@"appSettings"];
[prefs synchronize];
Мой класс appSettings требовал, чтобы я создал методы encodeWithCoder и initWithCoder, но как только я это сделал, я смог поместить класс в пользовательские значения по умолчанию.