ios - 如何将核心数据与多个 View Controller 和自定义类一起使用?

标签 ios xcode core-data keychain

好吧,我仍然在我的 iOS 项目中处理 Core Data,我想我很清楚它在概念上是如何工作的,但是我正在纠结如何在我的项目中实现它。我在我的 Xcode 项目中创建了一个场景,我希望软件的用户/运算符(operator)创建一个用户帐户,并将其存储在项目中。

首先让我声明一下,我以单一 View 应用程序开始这个项目,并且我通过执行以下操作将 Core Data 实现到我的项目中:

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

完成我认为必要的步骤后,我开始寻找一些关于核心数据的教程。我确实设法找到了一些,但它们似乎都与使用 UITableViewController 有关。我试图在我的项目中实现核心数据的 View Controller 是一个 UIViewController/p>

然后,在得知不应将密码存储在 Core Data 数据库中后,我决定弄清楚我将如何存储用户将创建的 pin。我遇到了一个实现 Core Data & Keychain 的教程,用于将非敏感数据存储在 Core Data 数据库中,将敏感数据存储在 Keychain 中。教程可见here .然而,该教程尚未准备好 ARC,因此需要对某些 ​​KeychainHelper.m 文件进行一些修改。在some help之后来自 stackoverflow 的 KeychainHelper.m 文件似乎已准备好 ARC。

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

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

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

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

最佳答案

通过使用以下代码行将 Account 类导入到 ViewControllerCreate 类的 header 中,我能够解决这个问题。

#import "Account.h"

我能够通过以下代码在各种类/ View Controller 中使用 ManagedObjectContext

// Core Data

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

然后我可以通过以下代码在 ViewControllerCreate 中使用 Account 类:

// 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]);

关于ios - 如何将核心数据与多个 View Controller 和自定义类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059008/

相关文章:

ios - ORKTextAnswerFormat 正则表达式验证

iphone - 用粉笔效果画线( cocoa / cocoa 触感)?

ios - 静态库公共(public) header 未复制到 Build/Products 文件夹

iphone - 显示自定义 NSManagedObject 的值

ios - 自定义对象数组 - Swift

ios - 使用 XCTest 设置一个 TestProject,其中包含针对 iOS 和 OSX 的两个测试目标以及共享单元测试

iphone - 根据自定义 URL 架构显示来自 appDelegate 的 View Controller

ios - 选择模拟器或 iOS 设备在 Xcode 上测试未出现

iOS Coredata无法打开sqlite数据库文件

swift - 什么是 Swift 中的桥接转换,如以下警告 : Conditional downcast from 'Data?' to 'CKRecordValue is a bridging conversion