2012-06-27 84 views
0

好吧,所以我的应用程序正在移动,我能够创建帐户,并登录与新创建的帐户。我也有一个可以显示所有账户列表的根账户。在开发这个应用程序的过程中,我在模拟器上创建了25个帐户(不要问)。所以对我来说,下一个合乎逻辑的步骤是实施一项功能来删除这些帐户。那么我开始研究事情,并意识到这将比最初计划困难得多。起初我以为我可以做一个获取请求并删除用户名,并且与它相关的所有数据都将被删除。我很快意识到我从来没有在我的实体中设置属性之间的关系。所以我知道你的想法,(核心数据数据库中的所有对象)。我并不反对这样做,但我已经在钥匙串中存储用户帐户的密码/密码。所以我不知道我是否删除了核心数据库中的所有对象,然后用用户帐户创建的这个针脚在某处处于钥匙链中。我有一个方法可以删除/删除一个帐户的钥匙串,但它需要一个用户名与它关联(这就是为什么我部分反对核对所有内容)。核心数据实体属性和关系,我想我foobared

因此,在我进一步创建任何更多帐户或将这件事情放在荒野中(还有很多开发工作要做)将属性关联在一起的最佳方式是什么,即在它们之间建立关系?既然这样,我一个实体命名帐户和实体之内我有4个属性:信贷电子邮件phoneNumber的用户名。我有一个表单,用户创建一个用户名,输入一个PIN码,电子邮件和电话号码。我希望能够通过删除用户名来删除所有这些属性,所以我想这应该有一些排序关系设置。

任何想法将不胜感激。

回答

0

好了,我现在可以删除该模拟器感谢用户帐户添加到下面的代码,FWIW,当我删除它也将删除与该帐户(奖金)相关的属性的帐户。我猜这些属性是被删除的对象的一部分(不确定)。但这是我正在寻找的功能。

- (IBAction)deleteAccount:(id)sender { 

// TODO - implement method/code to delete a user account 

// CORE DATA 
// setup up the fetch request 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

// define our table/entity to use 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext]; 
[request setEntity:entity]; 

// Fetch the records and handle an error 
NSError *error; 
NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:& error] mutableCopy]; 

if (!mutableFetchResults) { 
    // handle error. 
    // should advise user to restart 
} 

// compare text field text/string with results in an array 
for (Account *anAccount in mutableFetchResults) { 
    if([anAccount.username isEqualToString:self.tfDeleteAccount.text]) { 
     NSLog(@"username found."); 

     // delete keychain for account 
     [anAccount prepareForDeletion]; 

     // delete account object 
     [_managedObjectContext deleteObject:anAccount]; 

     // save the managed object context 
     NSError *error = nil; 
     if (![_managedObjectContext save:&error]) 
     { 
      NSLog(@"error %@", error); 
     } 
    } 
} 
} 
0

我不认为你理解核心数据属性和实体的概念。在和你聊天后,你有1个实体,它是帐户,你只需要从实体中删除该对象。

您可通过执行以下

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:[[CoreDataHelper sharedInstance] managedObjectContext]]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username == %@", usernameString]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 
[request setPredicate:predicate]; 

NSError *error = nil; 
Account *account = (Account*) [[[[CoreDataHelper sharedInstance] managedObjectContext] executeFetchRequest:request error:&error] objectAtIndex:0]; 

[[[CoreDataHelper sharedInstance] managedObjectContext] deleteObject:account]; 
[[[CoreDataHelper sharedInstance] managedObjectContext] processPendingChanges]; 

请注意,您的CoreData方面可能会有所不同这一点。

通过做好以上,这将删除与属性帐户对象(信贷,电子邮件,phoneNumber的,用户名)。

+0

我不想从核心数据数据库中删除核心数据实体,我只是想选择存储在核心数据数据库中的用户名,并删除相关信息。 如果我在Core Data DB中获取用户名,并将它们放入数组中。我想从数组中删除一个用户名。我还想删除与用户名相关的信息。这就是我问关系的原因。如果我删除一个帐户,我不想分别获取用户名,电子邮件和电话号码以删除与用户名关联的所有属性。 – Chris

+0

@Chris就像我说过的,我不认为你正在理解核心数据的概念。使用谓词根据用户名筛选帐户。然后采取该对象,并删除它。 – Bot

+0

@Chris我修改了上面的代码,向你展示了如何获取对象的基本思想。 – Bot