Основные строки данных - PullRequest
0 голосов
/ 06 февраля 2011

Я новичок в использовании основных данных и имею действительно базовые проблемы. Я пытаюсь сделать так, чтобы пользователь ввел строку, а затем смог сохранить эту строку и разрешить ей вернуться в какой-то момент. Но я не могу заставить его спасти. На самом деле программа закрывается, когда я пытаюсь запустить следующий метод. Я могу опубликовать оставшуюся часть моего проекта, но я подумал, что, возможно, это будет раздражать, поэтому дайте мне знать, если более подробное рассмотрение поможет. Большое спасибо.

Джеймс

.h: файл

#import <UIKit/UIKit.h>
#import "People.h"

@class rootViewController;

@interface data : UIView <UITextFieldDelegate>{
    rootViewController *viewController;
    UITextField *firstName;
    UITextField *lastName;
    UITextField *phone;
    UIButton *saveButton;
    NSMutableDictionary *savedData;

    //Used for Core Data.
    NSManagedObjectContext *managedObjectContext;
    NSMutableArray *peopleArray;
}

@property (nonatomic, assign) rootViewController *viewController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSMutableArray *eventArray;


- (id)initWithFrame:(CGRect)frame viewController:(rootViewController *)aController;
- (void)setUpTextFields;
- (void)saveAndReturn:(id)sender; 
- (void)fetchRecords;

@end

.m файл:

-(void)saveAndReturn:(id)sender{


    People *userEnteredName = (People *)[NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:managedObjectContext];
    [userEnteredName setName:firstName.text];

    //NSError *error;
    //if (![managedObjectContext save:&error]) {
        // This is a serious error saying the record could not be saved.
        // Advise the user to restart the application
    //}

    [peopleArray insertObject:userEnteredName atIndex:0];
}

1 Ответ

2 голосов
/ 06 февраля 2011

Из-за ошибки, которую вы дали, вы, должно быть, назвали объект People по-другому - в модели вы используете "People" как для имени класса, так и для имени объекта (они могут совпадать)?

Edit:

После просмотра кода у вас возникло несколько проблем:

1) В приложении-делегате вы сделали «[alloc alloc]», но не инициализировали. Именно здесь вы устанавливали контекст управляемого объекта, но он никогда не использовался ... не только из-за отсутствия инициализации, но и потому что ...

2) Местом, где контроллер данных был действительно построен и использован, был rootViewController. Это тот, кто фактически выполняет всю работу, тот, что в делегате приложения, просто отбрасывается.

3) Так где же тогда взять контекст? Честно говоря, лучшее место в контроллере данных, одно исправление, которое, как я знаю, работало, было помещать эту строку перед каждым обращением к контексту:

#import "UserProfileAppDelegate.h"

// Then in the method before the use of context........

self.managedObjectContext = [((UserProfileAppDelegate *)[[UIApplication sharedApplication] delegate]) managedObjectContext];

Когда это было на месте, проект запустился. Я думаю, что вы должны поместить это в нечто вроде viewDidLoad на контроллере данных (если у него есть представление, которое когда-либо использовалось).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...