Objective c 如何检查CoreData中是否存储了某些内容
嗨,我想能够在核心数据中存储一些信息,但我不确定如何检查文件是否正确保存。我尝试使用NSLog,但调用它时返回null。我有一本字典,它有一个唯一的ID和一个我想保存的标题。我将其与数据库的上下文一起传递。然后,我对数据库进行排序,以检查它是否有任何重复项,如果没有,则添加该文件Objective c 如何检查CoreData中是否存储了某些内容,objective-c,xcode,core-data,nspredicate,nsfetchrequest,Objective C,Xcode,Core Data,Nspredicate,Nsfetchrequest,嗨,我想能够在核心数据中存储一些信息,但我不确定如何检查文件是否正确保存。我尝试使用NSLog,但调用它时返回null。我有一本字典,它有一个唯一的ID和一个我想保存的标题。我将其与数据库的上下文一起传递。然后,我对数据库进行排序,以检查它是否有任何重复项,如果没有,则添加该文件 +(VacationPhoto*) photoWithFlickrInfo: (NSDictionary*) flickrInfo inManagedObjectContext: (NSManagedObjectCon
+(VacationPhoto*) photoWithFlickrInfo: (NSDictionary*) flickrInfo inManagedObjectContext: (NSManagedObjectContext*) context{
//returns the dictionary
NSLog(@"Photo To Store =%@", flickrInfo);
VacationPhoto * photo = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"VacationPhoto"];
request.predicate = [NSPredicate predicateWithFormat:@"uniqueID = %@", [flickrInfo objectForKey:FLICKR_PHOTO_ID]];
NSSortDescriptor * descriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:descriptor];
NSError *error = nil;
NSArray *matches = [context executeFetchRequest:request error:&error];
if (!matches || [matches count] > 1) {
// handle error
} else if ( [matches count] == 0){
photo.title = [flickrInfo objectForKey:FLICKR_PHOTO_TITLE];
//Returns NULL when called
NSLog(@"title = %@", photo.title);
photo.uniqueID = [flickrInfo objectForKey:FLICKR_PHOTO_ID];
//Returns NULL when called
NSLog(@"ID = %@", photo.uniqueID);
} else {
//If photo already exists this is called
photo = [matches lastObject];
}
return photo;
}
查看核心数据更改的最简单方法是使用 转到simulator文件夹,找到应用程序,转到documents并为您的应用程序打开文件夹 XCODE\u SIMLATOR\u XX 发现 应用程序 然后在那里找到你的应用程序,打开文档,找到你的app.sqlite, 使用sqlite浏览器打开它,轻松检查所有更改,不建议编辑数据结构,因为coredata不是sqlite,只使用sqlite保存数据,但您必须习惯核心数据的对象方法;)
幸运的是,在向数据库添加信息时,我没有调用insertNewObjectForEntityForName方法,这就是没有保存任何内容的原因。在我添加它之后,NSLogs提供了正确的信息
photo = [NSEntityDescription insertNewObjectForEntityForName:@"VacationPhoto" inManagedObjectContext:context];
photo.title = [flickrInfo objectForKey:FLICKR_PHOTO_TITLE];
NSLog(@"title = %@", photo.title);
photo.uniqueID = [flickrInfo objectForKey:FLICKR_PHOTO_ID];
NSLog(@"ID = %@", photo.uniqueID);
我认为文件保存不正确,因为我尝试使用相同的信息调用该方法两次,并没有说在第二次迭代中找到了副本,而是在没有这样的文件时进入if语句。我发现了问题,但您的解决方案看起来很有趣,我将研究它,+rep