NSUserDefaults не может хранить произвольные объекты, но только экземпляры NSData , NSString , NSNumber , NSDate , NSArray или NSDictionary . Вы можете, однако, преобразовать свой объект в один из них - например, используя NSKeyedArchiver :
+ (NSData *)archivedDataWithRootObject:(id)rootObject
(просто реализуйте два метода протокола NSCoding в классе вашей Программы).