IOS數(shù)據(jù)管理工具CoreData入門之雙向關(guān)系操作
IOS數(shù)據(jù)管理工具CoreData入門之雙向關(guān)系操作是本文要介紹的內(nèi)容,主要來介紹CoreData入門雙向關(guān)系的操作和學(xué)習(xí),不多說,我們先來看詳細(xì)內(nèi)容介紹。
雙向的時候,只用指定一邊,另外一邊自動指定,比如,如果一個帳號只有一個聯(lián)系人,而一個聯(lián)系人對應(yīng)一個帳號的話,那么帳號表和聯(lián)系人表就是一一對應(yīng)的關(guān)系,將他們指定為雙向的,如下面將cnt1.act = act1; cnt2.act = cnt2;則act1.cnt和act2.cnt也是有值的。注釋掉的兩句可有可無。
刪除規(guī)則
這里將Account表下面的cnt的刪除規(guī)則設(shè)定為cascade,則在刪除act1的時候,cnt1也被刪除了。而Contact表沒有將它下面的act的刪除規(guī)則設(shè)置為cascade,在刪除cnt1的時候,act1還存在。
一對多的關(guān)系
上面假設(shè)一個帳號只有一個聯(lián)系人是不合理的,那只是一種假設(shè),一般都是一個帳號下面有很多聯(lián)系人,這就是一對多的關(guān)系,上面的兩個法則也適用于這種關(guān)系,也就是說帳號下面的cnt設(shè)置為cascade,刪除一個帳號時,它所有的聯(lián)系人也被刪除了,而聯(lián)系人表下面的act設(shè)置為nullify,當(dāng)刪除一個聯(lián)系人的時候帳號表沒有變化。
- Account *act1 = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.managedObjectContext];
- act1.passport = @"passport1";
- act1.password = @"password1";
- Account *act2 = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.managedObjectContext];
- act2.passport = @"passport2";
- act2.password = @"password2";
- Contact *cnt1 = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];
- cnt1.passport = @"passport1";
- cnt1.nickname = @"nickname1";
- cnt1.act = act1;
- Contact *cnt2 = [NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];
- cnt2.passport = @"passport2";
- cnt2.nickname = @"nickname2";
- cnt2.act = act2;
- // act1.cnt = cnt1;
- // act2.cnt = cnt2;
- [self.managedObjectContext save:nil];
- // Delete a Account
- NSFetchRequest *fr = [[NSFetchRequest alloc] init];
- NSEntityDescription *ed = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:self.managedObjectContext];
- [fr setEntity:ed];
- NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];
- for (Account *act in ary) {
- //NSLog(@"%@ %@ %@ %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);
- if ([act.passport isEqualToString:@"passport2"]) {
- NSLog(@"DEL passport2");
- [self.managedObjectContext deleteObject:act];
- }
- }
- [self.managedObjectContext save:nil];
- // Delete a Contact
- NSFetchRequest *fr = [[NSFetchRequest alloc] init];
- NSEntityDescription *ed = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];
- [fr setEntity:ed];
- NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];
- NSLog(@"%d", ary.count);
- for (Contact *cnt in ary) {
- //NSLog(@"%@ %@ %@ %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);
- if ([cnt.nickname isEqualToString:@"nickname1"]) {
- NSLog(@"DEL nickname1");
- [self.managedObjectContext deleteObject:cnt];
- }
- }
- [self.managedObjectContext save:nil];
- // From Account62 NSFetchRequest *fr = [[NSFetchRequest alloc] init];
- NSEntityDescription *ed = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:self.managedObjectContext];
- [fr setEntity:ed];
- NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];
- for (Account *act in ary) {
- NSLog(@"%@ %@ %@ %@", act.passport, act.password, act.cnt.passport, act.cnt.nickname);
- }
- // From Contact73 NSFetchRequest *fr = [[NSFetchRequest alloc] init];
- NSEntityDescription *ed = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];
- [fr setEntity:ed];
- NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];
- for (Contact *cnt in ary) {
- NSLog(@"%@ %@ %@ %@", cnt.passport, cnt.nickname, cnt.act.passport, cnt.act.password);
小結(jié):IOS數(shù)據(jù)管理工具CoreData入門之雙向關(guān)系操作的內(nèi)容介紹完了,希望本文對你有所幫助!