iOS应用程序中的收藏按钮功能

时间:2014-12-08 13:45:30

标签: ios uitableview core-data uibutton

我一直在研究iOS应用程序,我的应用程序出现了奇怪的行为。

情景:

我有一个带2个按钮的屏幕。名为All Objects的第一个按钮和名为的第二个按钮是My Favorites Objects。

单击其中一个按钮,我将打开一个带有自定义单元格的表格视图控制器。      每个细胞都有按钮星,使其成为最受欢迎的。之后我按星号并保存remoteID和1为核心数据和另一个表中的收藏夹但是当我保存查询回来并检查我的收藏夹它没有显示任何内容。在那个按钮上,我编写了代码,用于从收藏夹按钮中获取所有对象。

收藏按钮上的代码IBAction方法

NSEntityDescription *sessionFavourite = [NSEntityDescription entityForName:@"Favourite" inManagedObjectContext:[APP_DELEGATE managedObjectContext]];
Favourite *favor =(Favourite *)[[NSManagedObject alloc] initWithEntity:sessionFavourite insertIntoManagedObjectContext:[APP_DELEGATE managedObjectContext]];
favor.remoteId = [sd remoteId];
favor.isFav    = [NSNumber numberWithInt:1];
NSError *error;
if (![[APP_DELEGATE managedObjectContext] save:&error]) {
     NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}

代码在视图中为我的收藏夹对象加载了ViewController

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favourite" inManagedObjectContext:[APP_DELEGATE managedObjectContext]];

[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *result = [[APP_DELEGATE managedObjectContext] executeFetchRequest:fetchRequest error:&error];
favList = [result mutableCopy];
NSLog(@"Count(%lu)",(unsigned long)[favList count]);

此处计数为零

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码,我没有看到任何缺陷,我渴望知道的是关于宏APP_DELEGATE,这是更新的代码,这是由你的代码激发的。

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

AppDelegate *appDel =  [UIApplication sharedApplication].delegate;
currentContext = appDel.managedObjectContext;

[self storeFavourites];
[self getFavourites];

}

//存储收藏夹方法

- (void)storeFavourites{
NSEntityDescription *sessionFavourite = [NSEntityDescription entityForName:@"Favourite" inManagedObjectContext:currentContext];

Favourite *favor =(Favourite *)[[NSManagedObject alloc] initWithEntity:sessionFavourite insertIntoManagedObjectContext:currentContext];
favor.remoteId = [NSNumber numberWithInteger:1]; // assuming this is integer as you have used some [sd remoteId]
favor.isFav = [NSNumber numberWithInt:2]; 

NSError *error;
if (![currentContext save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}

save方法正常,因为我在应用程序主目录中验证了这一点,现在添加了fetch方法

- (void)getFavourites{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favourite" inManagedObjectContext:currentContext];

[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *result = [currentContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"%lu",(unsigned long)result.count);
}

要在最后解决这个问题,请添加调试器并检查managedObjectContext是否有内存,很多时候这是常见问题,因为没有提取/添加数据。

希望有所帮助