0

好吧,我仍然在我的 iOS 项目中使用 Core Data,我认为我对它在概念上的工作原理有一个很好的了解,但是我正在努力如何在我的项目中实现。我在我的 Xcode 项目中创建了一个场景,我希望软件的用户/操作员创建一个用户帐户,并将其存储在项目中。

首先让我声明我将项目作为单视图应用程序启动,并通过执行以下操作将 Core Data 实现到我的项目中:

  • 在我的项目中链接到核心数据框架
  • 然后创建了另一个项目,选中了 Core Data 复选框
  • 复制/粘贴AppDelegate.h/m 文件中的代码。
  • 创建文件.xcdatamodeld
  • 将以下行添加到KegCop-Prefix.pch文件#import <CoreData/CoreData.h>
  • 创建了一个 Entity Account ,并在file.xcdatamodel中添加了以下属性email phoneNumber username

在完成我认为必要的步骤后,我寻找一些关于核心数据的教程。我确实设法找到了一些,但它们似乎都使用UITableViewController 我试图在我的项目中实现核心数据的视图控制器是UIViewController

然后在了解到不应将密码存储在 Core Data 数据库中之后,我决定弄清楚我将如何存储用户将创建的pin 。我遇到了一个教程,它实现了核心数据和钥匙串,将非敏感数据存储在核心数据数据库中,将敏感数据存储在钥匙串中。该教程可以在这里找到。然而,本教程还没有准备好 ARC,因此需要对一些KeychainHelper.m文件进行一些修改。在stackoverflow 的帮助下,KeychainHelper.m 文件似乎已准备好 ARC。

现在完成上述教程后,我的项目中有三个新类AccountBaseAccountKeychainHelper。我的项目目前正在构建没有任何错误 \o/ 但我希望能够将新创建的类实现到我的项目中,即实际使用它们。这是本教程未讨论的内容。现在请记住,近一个月来,我几乎每天都在使用 Xcode,所以我对很多东西还是陌生的。其中之一就是我将如何将这些新类实现到我的项目中。

基本上我希望用户输入用户名、pin(两次)电子邮件和电话号码。我想将用户名、电子邮件和电话号码存储在核心数据数据库中,并将 pin 存储在钥匙串中。

我将如何在ViewControllerCreate中使用新创建的类文件Account来检索用户输入到文本字段中的值并将它们存储到 Core Data 数据库中?

很抱歉写了这么长的帖子,我想我会尽量把它说清楚,这样就不会有任何混淆。

4

1 回答 1

3

I was able to solve this problem by importing the Account class into the header of the ViewControllerCreate class with the following line of code.

#import "Account.h"

I was able to use the ManagedObjectContext through out the various classes / view controllers with the following code

// Core Data

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

I was then able to utilize the Account class in the ViewControllerCreate with the following code:

// 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]);
于 2012-06-28T02:43:51.527 回答