لماذا أحصل على مثيل مختلف من ViewController من تلك التي دفعتها إلى NavigationController؟

StackOverflow https://stackoverflow.com/questions/3168004

سؤال

لماذا سأحصل على مثيل مختلف لـ 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: الرسوم المتحركة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top