2012-06-15 62 views
0

好吧,我仍然在我的iOS項目中使用Core Data,並且我想我在概念上有一個好主意,但是我在如何實現我的項目方面掙扎不已。我在Xcode項目中創建了一個場景,我希望軟件的用戶/操作員創建用戶帳戶,並將其存儲在項目中。如何將Core Data用於多個視圖控制器和自定義類?

首先請允許我,我開始以項目爲單一視圖的應用和我實現了核心數據到我的項目通過執行以下操作:

  • 鏈接到Core Data框架在我的項目
  • 然後創建另一個項目,選中核心數據複選框
  • 將代碼複製/粘貼到AppDelegate.h/m文件中。
  • 創建file.xcdatamodeld
  • 添加以下行至KegCop-Prefix.pch文件#import <CoreData/CoreData.h>
  • 創建的實體帳戶,並添加以下屬性電子郵件phoneNumber的用戶名file.xcdatamodel

在完成我發現的必要步驟之後,我試圖找到關於核心數據的一些教程。學習後,我還是設法找到了一些,但他們似乎都處理使用的UITableViewController,我想在我的項目實施核心數據視圖控制器是一個的UIViewController

然後是一個不應該將密碼存儲在Core Data數據庫中我決定了解我將如何存儲用戶創建的引腳。我遇到了一個教程,該教程實現了Core Data & Keychain,用於在Core Data數據庫中存儲不敏感數據以及在Keychain中存儲敏感數據。該教程可以在here找到。然而,該教程不是ARC準備好的,因此需要對KeychainHelper.m文件中的一些進行一些修改。從stackoverflow some help後,KeychainHelper.m文件似乎是ARC準備好了。

現在完成了上述的教程我在項目中有三個新的類後,AccountBase帳戶KeychainHelper。我的項目目前沒有任何錯誤,但我希望能夠將新創建的類實現到我的項目中,即實際使用它們。這是本教程未討論的內容。現在請記住,我幾乎每天都在使用Xcode幾乎一個月,所以我對很多事情仍然很陌生。其中之一就是我將如何將這些新類實現到我的項目中。

基本上我希望用戶輸入用戶名,PIN(兩次)電子郵件和電話號碼。我想將用戶名,電子郵件和電話號碼存儲在覈心數據庫中,並將該PIN存儲在鑰匙串中。

我將如何使用新創建的類文件帳戶ViewControllerCreate來獲取值的用戶輸入到文本字段,並將它們存儲到核心數據的數據庫?

對不起,這麼長的一篇文章,我認爲我只是儘量做到這一點儘可能清楚,所以不會有任何混淆。

回答

3

我能夠通過使用以下代碼行將Account類導入ViewControllerCreate類的標題來解決此問題。

#import "Account.h"

我能夠出的各種類/視圖控制器用下面的代碼

// Core Data 

if (_managedObjectContext == nil) 
{ 
    _managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After _managedObjectContext: %@", _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委託訪問託管對象上下文,而是將託管對象上下文作爲屬性傳遞給需要核心數據的不同視圖控制器。請參閱此鏈接:https://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html –

相關問題