2012-06-15 3 views
0

Хорошо, я все еще возился с Core Data в моем проекте iOS, и я думаю, что у меня есть хорошая идея, как это работает концептуально, но я борюсь за то, как я должен реализовывать свой проект. Я создал сцену в моем проекте Xcode, где я хочу, чтобы пользователь/оператор программного обеспечения создал учетную запись пользователя, сохранил ли она в проекте.Как использовать базовые данные с несколькими контроллерами и пользовательскими классами?

Во-первых, позвольте мне заявить, я начал проект как одного приложения вид и я реализовал Core Data в мой проект, выполнив следующие действия:

  • ссылки на базы данных по основным в моем проекте
  • затем был установлен флажок checkbox
  • скопирован/вставлен код в AppDelegate.h/m файлы.
  • создал file.xcdatamodeld
  • добавил следующую строку в файлKegCop-Prefix.pch #import <CoreData/CoreData.h>
  • создал Entity счет, и добавил следующие атрибуты электроннойPHONENUMBERимя пользователя в file.xcdatamodel

После того, как я нашел необходимые шаги, я попытался найти некоторые учебные пособия по основным данным. Мне удалось найти некоторые, но все они, казалось, иметь дело с использованием UITableViewController мнение контроллера, который я пытаюсь реализовать Core Data в моем проекте является UIViewController

Затем, узнав, что один не должен хранить пароли в базе данных Core Data Я решил выяснить, как я собирался хранить контакт, который пользователь создал. Я наткнулся на учебник, в котором реализованы основные данные & Keychain's для хранения нечувствительных данных в базе данных Core Data и чувствительных данных в Keychain. Учебник можно найти here. Однако учебник не был готов к ARC, поэтому некоторые модификации были необходимы для некоторых файлов KeychainHelper.m. После some help из stackoverflow файл KeychainHelper.m представляется готовым ARC.

Теперь после завершения вышеизложенного учебника я имел три новый класс в моем проекте, AccountBase, счета и KeychainHelper. Мой проект строится без каких-либо ошибок в настоящий момент \ o /, но я хочу иметь возможность внедрять только что созданные классы в свой проект, то есть фактически использовать их. Это то, что учебник не обсуждает. Теперь имейте в виду, что я использую Xcode почти на ежедневной основе почти месяц, поэтому я все еще новичок во многих вещах. И одна из таких вещей - это то, как я буду применять эти новые классы в своем проекте.

В основном я хочу, чтобы пользователь вводил имя пользователя, контакт (дважды) и номер телефона. Я хочу сохранить имя пользователя, адрес электронной почты и номер телефона в базе данных основных данных и сохранить контакт в цепочке ключей.

Как бы использовать вновь созданный файл класса счета в моем ViewControllerCreate для извлечения значений вводимых пользователем в текстовые поля и сохранять их в базе данных Core Data?

Извините за такой длинный пост, подумал, что я просто попытаюсь сделать это как можно яснее, чтобы не было путаницы.

ответ

3

Я смог решить эту проблему, импортировав класс Account в заголовок класса ViewControllerCreate со следующей строкой кода.

#import "Account.h"

Я был в состоянии использовать ManagedObjectContext путем из различных классов/контроллеров отображения с помощью следующего кода

// Core Data 

if (_managedObjectContext == nil) 
{ 
    _managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After _managedObjectContext: %@", _managedObjectContext); 
} 

Я был тогда в состоянии использовать счета класса в ViewControllerCreate с следующий код:

// Core Data - retrieve values from text fields and store in database. 
    Account *newAccount; 
    newAccount = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:_managedObjectContext]; 
    [newAccount setValue:_createUserTextField.text forKey:@"username"]; 
    [newAccount setValue:_createEmailTextField.text forKey:@"email"]; 
    [newAccount setValue:_createPhoneNumber.text forKey:@"phoneNumber"]; 

    // TODO store pin in keychain 
    [newAccount setPassword:_createPinTextField.text]; 
    NSLog(@"Pin saved is %@", [newAccount password]); 
+7

Обратите внимание, что Apple не рекомендует использовать A pp Delegate для доступа к контексту управляемых объектов, но вместо этого передайте контекст управляемого объекта как свойство для разных контроллеров представления, которым потребуется Core Data. См. Эту ссылку: https://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html –

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