วันศุกร์ที่ 12 พฤศจิกายน พ.ศ. 2553

CoreData Basic สร้าง Project With CoreData

สำหรับ Entry นี้จะเป็นการสร้าง Project ที่ต้องการใช้ CoreData จนถึงการเพิ่มข้อมูลนะครับ

เริ่มจากการสร้าง Project ใหม่ขึ้นมาก่อนครับ
ในหน้า New Project ตรงส่วนของ Product จะมี Use Core Data for storage ให้เลือกครับ



ทำการตั้งชื่อ Project 
ผมตั้งชื่อว่า CoreDataFromTemplate นะครับ
สร้าง Project ที่ใช้ Core Data เสร็จแล้ว

ใน Project จะมีไฟล์ CoreDataFromTemplate.xcdatamodel (ข้างหน้า . จะเป็นชื่อ Project นะครับ) 



เราจะทำการออกแบบโครงสร้างข้อมูลในนี้นะครับ
กดไปที่ไฟล์ CoreDataFromTemplate.xcdatamodel 

เริ่มจากการสร้าง Entity ก่อนนะครับ
กดเครื่องหมาย + ของ Entity หลังจากนั้นตั้งชื่อครับ (ตั้งชื่อ Class ด้วยนะครับ)



การใส่ Property เลือก Entity ที่ต้องการใส่ Property จาก Entity 
กดเครื่องหมาย + ในส่วนของ Property เลือก Add Attribute



ตั้งชื่อในช่อง Name และเลือกชนิดของข้อมูลที่ Type 



เราก็จะได้ Attribute ของ Entity แล้วครับ
เราสามารถเพิ่ม Attribute เข้าไปตามที่เราออกแบบโครงสร้างข้อมูลไว้
หลังจากนั้น Save ครับ

หลังจากออกแบบเสร็จเราจะทำการสร้าง Class ของข้อมูลที่เราออกแบบไว้
โดยคลิกขวาที่ Project เลือก Add -> New File…



เลือก Managed Object Class ครับ



เลือก Next ไปจนถึงหน้า Managed Object Class Generation
ทำการเลือก Entity ที่เราต้องการสร้าง Class กด Finish



เราจะได้ Class ของ Entity ที่เราต้องการสร้างขึ้นมา



(สำหรับบางทีที่ New File… แล้ว Managed Object Class ไม่ขึ้นให้เลือก
ให้ทำการเพิ่ม Entity ใน CoreDataFromTemplate.xcdatamodel แล้วลองเลือกใหม่
ปัญหานี้ผมยังหาวิธีแก้ที่มีประสิทธิภาพไม่ได้ครับ -"- ปัจจุบันใช้การสร้าง Entity ใหม่แล้ว
เลือกเฉพาะ Entity ที่ใช้งานครับ ถ้าได้วิธีที่ดีกว่านี้จะมาเพิ่มให้นะครับ หรือใครมีวิธีดีๆ 
ก็แนะนำกันได้ครับ)

การเพิ่มข้อมูล

สร้าง ViewController จากการ Add -> New File… เลือก UIViewController subclass
ตรง Option เลือก With XIB for user interface กด Next ตั้งชื่อ (ผมตั้งชื่อ MainViewController นะครับ)



จะได้ไฟล์เพิ่มขึ้น 3 ไฟล์



เริ่มจาก MainViewController.h
import Class ของข้อมูลที่เราออกแบบไว้
เพิ่ม NSManagedObjectContext และ Outlet ของ TextField
เพิ่ม Action สำหรับการกดใส่ข้อมูล

#import <UIKit/UIKit.h>
#import "MyEntity.h" // <<<< Add This Line

@interface MainViewController : UIViewController {
IBOutlet UITextField *_name; // <<<< Add This Line
NSManagedObjectContext *managedObjectContext; // <<<< Add This Line
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; // <<<< Add This Line

-(IBAction) addNew; // <<<< Add This Line

@end



ใน MainViewController.xib
เพิ่มช่องใส่ข้อมูล และ ปุ่มกด
ทำการ Link Outlet (TextField) และ Action (Button) (กด Control แล้วลาก)



ใน MainViewController.m 
ทำการ synthesize managedObjectContext
และเพิ่ม Action addNew
Implement Action addNew

#import "MainViewController.h"


@implementation MainViewController

@synthesize managedObjectContext; // <<<< Add This Line

- (void)dealloc {
[_name release]; // <<<< Add This Line
[managedObjectContext release]; // <<<< Add This Line
    [super dealloc];
}


 // Add This Action
-(IBAction) addNew{
MyEntity *myEntity = (MyEntity *)[NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" 
inManagedObjectContext:managedObjectContext];
myEntity.name = _name.text;
NSError *error;
if (![managedObjectContext save:&error]) {
//Handle the error.
}
}

@end



กลับไปที่ CoreDataFromTemplateAppDelegate.h
ทำการ Import MainViewController.h

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "MainViewController.h" // <<<< Add This Line



ใน CoreDataFromTemplateAppDelegate.h 
ที่ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
เพิ่ม Code

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

   // Begin Add Code.
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error.
}
MainViewController *mainViewController = [[MainViewController alloc] init];
mainViewController.managedObjectContext = context;
[window addSubview:mainViewController.view];

// End Add Code.
    [window makeKeyAndVisible];

    return YES;
}



หลังจากนั้นลอง Build And Run

ใน Blog นี้จะถึงการ Add ข้อมูลนะครับ
ส่วนการอ่าน เขียน แก้ไข ลบ จะมาเขียนเพิ่มเติมให้ใน Blog หน้านะครับ

ส่วนใครที่ส่งสัยว่าข้อมูลจะถูกเก็บไว้จริงหรือเปล่าก็ให้ลองไปสร้าง Action สำหรับแสดงข้อมูล
ใน MainViewController ดูละกันครับ (สำหรับคนที่สร้างเป็น ส่วนที่ไม่เป็นรอ Entry หน้านะครับ)

Code : 
-(IBAction) showData{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" 
  inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}
for (MyEntity *myEntity in mutableFetchResults) {
NSLog(@"%@", myEntity.name);
}
[mutableFetchResults release];
[request release];
}



ไม่มีความคิดเห็น:

แสดงความคิดเห็น