2013-10-02 4 views
0

Так что я создаю приложение в виде приложения для социальных сетей. Я использую учебник, найденный here как плацдарм, так как я все еще пытаюсь обернуть мозг вокруг Core Data. Я отклонился от учебника, добавив кнопку регистрации, которая выводит пользователя на новый контроллер просмотра и создает файл .h и .m и устанавливает экран «Новый элемент» для ссылки на файлы .h и .m. Они устанавливаются следующим за .h:Помощник Coredata

#import <UIKit/UIKit.h> 

@interface NewMemberViewController : UIViewController 

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; 

@property (strong, nonatomic) IBOutlet UITextField *nameTF; 

@property (strong, nonatomic) IBOutlet UITextField *ageTF; 

@property (strong, nonatomic) IBOutlet UITextField *usernameTF; 

@property (strong, nonatomic) IBOutlet UITextField *passwordTF; 

- (IBAction)alreadyMember:(id)sender; 
- (IBAction)checkAndLogin:(id)sender; 


@end 

и для .m:

#import "NewMemberViewController.h" 
#import "CoreDataHelper.h" 

@interface NewMemberViewController() 

@end 

@implementation NewMemberViewController 

@synthesize usernameTF, ageTF, passwordTF, nameTF, managedObjectContext; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    // Custom initialization 
} 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
//If the user is already a member simply dismiss the VC 
- (IBAction)alreadyMember:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

//When done editing keyboard 
- (IBAction)checkAndLogin:(id)sender { 
managedObjectContext =self.managedObjectContext; 

//Textfield Reference 
UITextField *tf = (UITextField *)sender; 

//Check tag numbers If its equal to 1 or 2(nameTF or ageTF) then 
if (tf.tag==1||tf.tag==2) 
{ 
    [sender resignFirstResponder]; 
    NSLog(@"This is working"); 
} 
//If its equal to 3 then this means the username text field is active 
else if (tf.tag == 3) 
{ 
    [sender resignFirstResponder]; 
    //do a quick search to see if username is availible 
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(username == %@)", [usernameTF text]]; 

    //Run the query to check if user exists 
    if([CoreDataHelper countForEntity:@"Users" withPredicate:pred andContext:managedObjectContext] > 0) 
    { 
     //we found a user 
     NSLog(@"oh no..."); 
    } 
    } 
} 
@end 

С этим сказал, что если я бегу мое приложение и перейти на экран регистрации и тест, чтобы увидеть если пользователь существует, введя в администраторе, так как он уже существует, я получаю следующее сообщение об ошибке в Xcode:

Полотно [779: 11603] * WebKit отбрасывается неперехваченное исключение в WebView: shouldInsertText : ReplacingDOMRange: givenAction: делегат: + entityForName: ноль ищет не юридический параметр NSManagedObjectContext для имени объекта «» Пользователи

Что это значит и почему оно вызвано?

ответ

0

Вы передали контекст контроллеру? Попробуйте с:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication]delegate]; 
yourVontext = [appDelegate managedObjectContext]; 

до извлечения.

+0

Для этого мне нужно будет импортировать что-либо в файл .h? – joeBustamante

+0

Хотел сказать спасибо. Я добавил это в начало моего действия «checkAndLogin», а затем запустил его, и мое приложение сработало! Еще раз спасибо. – joeBustamante

+0

Ты добрый! – RFG

0

Существует проблема с нижней строкой.

managedObjectContext = self.managedObjectContext; 

self.managedObjectContext возвращается ноль в managedObjectContext. Вместо self.managedObjectContext вы должны создать Core Data Stack (реализация метода) в делетете Application, а затем передать ссылку объекта ManagedObjectContext из AppDelegate в ваш класс вызывающего абонента.

+0

У меня есть базовый стек данных, который настроен в AppDelegate, но как мне перейти к передаче ссылки на объект? – joeBustamante

+0

@joeBustamante Я думаю, вы получили ответ на свой вопрос выше. –

Смежные вопросы