2012-10-13 14 views
5

Temel Veriler ile çalışıyorum ve verileri basit bir veri modeliyle görüntülemeye çalışıyorum. nedeniyle yakalanmamış istisna 'NSInvalidArgumentException', akıl için uygulama çöker ve Uygulamayı bana Sonlandırma bu hata mesajınıTemel Veriler Hata Verme

verir: '+ entityForName: nil varlık adına arayan bir yasal NSManagedObjectContext parametre değildir '

'' hatırlatın

Tamamen emin değilim, ama onu nasıl aldığımı hatırlatması benim varlığımın Remind adında bulunamadığını söylemesidir? Ancak, aslında Remind adında bir varlığa sahibim.

Ben de kesme noktaları koymak ve tam burada durur: enter image description here

Herhangi bir yardım büyük takdir. Tamamen çıkmaz bir noktada. Uygulama Delegesi içinde

Yönetilen Bağlam kodu Buradaki sorun sizin erişimci ve ivar aynı isme sahip olmasıdır

enter image description here

+0

Yönetilen nesne içeriğiniz sıfırdır. Bir ivar olduğunu farz ediyorum ... Hiçbir şeye ayarlanmamış. –

+0

Yanıtınız için teşekkür ederiz. Bu sorunu nasıl çözebileceğimi söyleyebilir misiniz? – Zack

+0

Maalesef hayır, ya da bir cevaba koydum. Daha fazla kod eklemeniz gerekiyor, burada yeterli bilgi yok. Görünüm denetleyicinizde, manageObjectContext ivar'ı nerede ayarlıyorsunuz? –

cevap

1

.m. Barbar ivar'ın geldiği yer burası. Burada, mülkünüze erişmek için erişimciyi kullanmıyorsunuz, destek değişkenini doğrudan kullanıyorsunuz, böylece asla başlatılamayacak. Bunun yerine, her zaman erişimci yöntemlerinizi kullandığınızdan emin olun ve bir sorun yaşamayacaksınız. Yani, böyle bir şeyle managedContextObject özelliğini kullanın kusurlu yöntemi (ve buna benzer başka yeniden aşağıdadır:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing 

    // Get a reference to the managed object context *through* the accessor 
    NSManagedObjectContext* context = [self managedObjectContext]; 

    // From now on, we only use this reference in this method 
    NSFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor 
    [request setEntity:entity]; 
    NSError* error = nil; 
    NSArray* array = [context executeFetchRequest:request error:&error]; 
    if(!array) { 
    // Do something with the error 
    NSLog(@"Error Fetching: %@", error); 
    } 
    [self setDesitnationsArray:[array mutableCopy]]; 
    [destinationsTableView reloadData]; 
} 

Kullanmak cazip olmayacak bir şey için ivars değiştirmek isteyebilirsiniz veya hemen olacak _managedObjectContext ve hatta _privateContext gibi erişim sağlayıcılarından geçmediğiniz ya da erişim sağlayıcıları aracılığıyla özelliklere erişmeye başlayana kadar size sadık kaldığınız açıkça görülecektir. Özelliklere erişmek için Objective-C sözdizimini sevmiyorsanız nokta sözdizimini kullanabilir, ancak her zaman self'dan geçmeyi unutmayın, örneğin, self.managedObjectContext.İnsanlar doğrudan mülkiyet erişimi olmadığını ve erişim sağlayıcıları kullandığını unuttuğundan bu yöntemi sevmiyorum Bu nedenle, doğrudan sözdizimi için nokta sözdizimini birbiriyle eşleştirmenin doğru olmadığını düşünürler (sizin durumunuzda olduğu gibi).

+0

Cevabınız için teşekkür ederiz. Ancak yukarıdaki gibi kodları aşağıdaki gibi değiştirdim ve hala bana aynı hatayı veriyor. – Zack

+0

@zack, daha sonra uygulamanızın temsilcisinden alın. Sorun şu ki, senin ivarın sıfır değil ve bu bir hatadır. Bu yöntemde yönetilen nesne bağlamına bir başvuru yoktur. –

+0

@JasonCoco Aynı problemim var. Benim durumumda bağlam yoktur. App Delegate'den nasıl alacağımı lütfen bana bildirir misiniz? –

İlgili konular