لماذا أحصل على مثيل مختلف من ViewController من تلك التي دفعتها إلى NavigationController؟
سؤال
لماذا سأحصل على مثيل مختلف لـ HistoryViewController من تلك التي قمت بتثبيتها ودفعت إلى NavigationController؟
لا يحتوي المثيل المختلفة التي تم إنشاؤها على أي من الخصائص التي قمت بتعيينها.
profileHomeViewController.M
HistoryViewController *historyViewController = nil;
historyViewController = [[HistoryViewController alloc] initWithNibName:@"HistoryViewController" bundle:nil];
// nib has identity of NSObject (I also tried HistoryViewController), and tableviewcontroller with identity HistoryViewController
historyViewController.profile = self.profile;
NSLog(@"%@ > %@", self, self.managedObjectContext);
// <ProfileHomeViewController: 0x5b34330> > <NSManagedObjectContext: 0x7918770>
historyViewController.managedObjectContext = self.managedObjectContext;
NSLog(@"%@ > %@", historyViewController, historyViewController.managedObjectContext);
// <HistoryViewController: 0x792a870> > <NSManagedObjectContext: 0x7918770>
[self.navigationController pushViewController:historyViewController animated:YES];
[historyViewController release];
HistoryViewController.h
@interface HistoryViewController : UITableViewController {
NSManagedObject *profile;
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) NSManagedObject *profile;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
HistoryViewController.M
@implementation HistoryViewController
@synthesize profile;
@synthesize fetchedResultsController;
@synthesize managedObjectContext;
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"inside HistoryViewController %@ > profile %@", self, self.profile);
// inside HistoryViewController <HistoryViewController: 0x7917750> > profile (null)
NSLog(@"inside HistoryViewController %@ > managedObjectContext %@", self, self.managedObjectContext);
// inside HistoryViewController <HistoryViewController: 0x7917750> > managedObjectContext (null)
if(self.managedObjectContext == nil){
NSLog(@"invalid managedObjectContext WTF");
abort();
}
}
المحلول
المثيل هو نفسه ، والمراجع إلى نفس الحالة مختلفة (وهو جيد).
يتم استدعاء طريقة ViewDiddload قبل يمكنك تعيين المتغيرات وهذا هو السبب في self.managedObjectContext == nil.
إما أن تكتب طريقة init مخصصة تأخذ تاريخ المعلمات و managedObjectContext وتعيينها في init. أو بدلاً من استخدام ViewDidload ، استخدم ViewWillAppear: الرسوم المتحركة ...
لا تنتمي إلى StackOverflow