IOS數(shù)據(jù)管理工具CoreData入門(mén)之雙向關(guān)系操作
IOS數(shù)據(jù)管理工具CoreData入門(mén)之雙向關(guān)系操作是本文要介紹的內(nèi)容,主要來(lái)介紹CoreData入門(mén)雙向關(guān)系的操作和學(xué)習(xí),不多說(shuō),我們先來(lái)看詳細(xì)內(nèi)容介紹。
雙向的時(shí)候,只用指定一邊,另外一邊自動(dòng)指定,比如,如果一個(gè)帳號(hào)只有一個(gè)聯(lián)系人,而一個(gè)聯(lián)系人對(duì)應(yīng)一個(gè)帳號(hào)的話,那么帳號(hào)表和聯(lián)系人表就是一一對(duì)應(yīng)的關(guān)系,將他們指定為雙向的,如下面將cnt1.act = act1; cnt2.act = cnt2;則act1.cnt和act2.cnt也是有值的。注釋掉的兩句可有可無(wú)。
刪除規(guī)則
這里將Account表下面的cnt的刪除規(guī)則設(shè)定為cascade,則在刪除act1的時(shí)候,cnt1也被刪除了。而Contact表沒(méi)有將它下面的act的刪除規(guī)則設(shè)置為cascade,在刪除cnt1的時(shí)候,act1還存在。
一對(duì)多的關(guān)系
上面假設(shè)一個(gè)帳號(hào)只有一個(gè)聯(lián)系人是不合理的,那只是一種假設(shè),一般都是一個(gè)帳號(hào)下面有很多聯(lián)系人,這就是一對(duì)多的關(guān)系,上面的兩個(gè)法則也適用于這種關(guān)系,也就是說(shuō)帳號(hào)下面的cnt設(shè)置為cascade,刪除一個(gè)帳號(hào)時(shí),它所有的聯(lián)系人也被刪除了,而聯(lián)系人表下面的act設(shè)置為nullify,當(dāng)刪除一個(gè)聯(lián)系人的時(shí)候帳號(hào)表沒(méi)有變化。
- 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入門(mén)之雙向關(guān)系操作的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!