我已将所有相关代码添加到App Delegate中,并且我能够添加到数据模型并从applicationDidFinishLaunchingWithOptions中的数据模型中获取.
当我尝试在View Controller中写入数据模型时,我的问题出现了.我已将此代码添加到头文件中:
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
Run Code Online (Sandbox Code Playgroud)
这个代码到我的实现文件:
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *model = [NSEntityDescription
insertNewObjectForEntityForName:@"Events"
inManagedObjectContext:context];
[model setValue:@"Sample Event" forKey:@"eventName"];
NSError *error;
if (![context save:&error]) {
NSLog(@"Couldn't save: %@", [error localizedDescription]);
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Events''
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么?任何帮助,将不胜感激.
我是iOS的新手.我一直在尝试制作一个应用程序,将从相机捕获的图像存储到其中CoreData.我现在知道如何存储像NSStrings NSDate和其他类型的数据,但努力存储图像.我读了很多文章说你必须把它写到磁盘上并写入文件,但我似乎无法理解它.
以下代码是我用于将其他数据存储到核心数据的代码.
- (IBAction)submitReportButton:(id)sender
{
UrbanRangerAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
managedObjectContext = [appDelegate managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PotholesDB" inManagedObjectContext:appDelegate.managedObjectContext];
NSManagedObject *newPothole = [[NSManagedObject alloc]initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];
[newPothole setValue:self.relevantBody.text forKey:@"relevantBody"];
[newPothole setValue:self.subjectReport.text forKey:@"subjectReport"];
[newPothole setValue:self.detailReport.text forKey:@"detailReport"];
// [newPothole setValue:self.imageView forKey:@"photo"];
NSDate *now = [NSDate date];
//NSLog(@"now : %@", now);
NSString *strDate = [[NSString alloc] initWithFormat:@"%@", now];
NSArray *arr = [strDate componentsSeparatedByString:@" "];
NSString *str;
str = [arr objectAtIndex:0];
NSLog(@"now : %@", str);
[newPothole setValue:now …Run Code Online (Sandbox Code Playgroud) 我在我的iPhone 6中使用iOS 9 beta 5从Xcode 6运行我的应用程序时,在我的控制台中获得了一些这些打印件:
CoreData:无法在路径'/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'中加载优化模型
我找不到与此相关的东西,有没有人对这条消息有所了解?
在iPhone上学习核心数据.核心数据似乎很少有用于填充表格视图的示例.该CoreDataBooks示例使用节,但他们是从模型中的满弦产生.我想通过姓氏的第一个字母,即地址簿,将核心数据表组织成各个部分.
我可以进入并为每个人创建另一个属性,即单个字母,以便充当分区,但这看起来很笨拙.
这就是我开始的......诀窍似乎在愚弄sectionNameKeyPath:
- (NSFetchedResultsController *)fetchedResultsController {
//.........SOME STUFF DELETED
// Edit the sort key as appropriate.
NSSortDescriptor *orderDescriptor = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:orderDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"personName" cacheName:@"Root"];
//....
}
Run Code Online (Sandbox Code Playgroud) 我需要foo在我的子类中为字段(我们称之为)编写自定义setter方法NSManagedObject.foo在数据模型中定义,Xcode分别自动生成@property和@dynamic.h和.m文件中的字段.
如果我像这样写我的二传手:
- (void)setFoo: (NSObject *)inFoo {
[super setFoo: inFoo];
[self updateStuff];
}
Run Code Online (Sandbox Code Playgroud)
然后我在调用时收到编译器警告super.
或者,如果我这样做:
- (void)setFoo: (NSObject *)inFoo {
[super setValue: inFoo forKey: inFoo];
[self updateStuff];
}
Run Code Online (Sandbox Code Playgroud)
然后我最终陷入无限循环.
那么为NSManagedObject的子类编写自定义setter的正确方法是什么?
我有一个NSManagedObject已被删除,并且已保存包含该托管对象的上下文.据我所知,isDeleted返回YES如果核心数据会问持久存储删除对象的下一个保存操作过程中.但是,由于保存已经发生,因此isDeleted返回NO.
在保存包含上下文之后判断是否NSManagedObject已被删除的好方法是什么?
(如果您想知道为什么引用已删除的托管对象的对象还不知道删除,那是因为删除和上下文保存是由执行删除并使用保存的后台线程启动的performSelectorOnMainThread:withObject:waitUntilDone:.)
在iPhone核心数据模板中,Apple将核心数据堆栈放在App Delegate中.
然而,我最初的倾向是将此代码移动到它自己的类中,该类的职责是处理核心数据堆栈的管理.
您是否通常将此功能封装在自己的类中,还是将其保留在App Delegate中?
在iOS 5中,NSManagedObjectContext有几种新方法,performBlock:和performBlockAndWait:.实际使用的这些方法是什么?它们在旧版本中取代了什么?什么样的街区应该传递给他们?我该如何决定使用哪个?如果有人有一些使用它们的例子,那就太好了.
我想将NSUInteger保留到我的核心数据中,我不知道应该使用哪种类型(整数16,32,64)来满足所需的空间.
根据我的理解:
Integer 16 can have minimum value of -32,768 to 32,767
Integer 32 can have minimum value of -2,147,483,648 to 2,147,483,647
Integer 64 can have minimum value of -very large to very large
Run Code Online (Sandbox Code Playgroud)
和NSUInteger是unsigned long的类型def,等于unsigned int(iPhone上的objective-c中的类型)
所以,如果我使用numberWithUnsignedInteger将我的NSUInteger转换为NSNumber:并将其保存为NSNumber(整数32),我可以安全地检索我的数据吗?
我正准备更新基于Core Data的应用程序以修复iOS 7.我使用Xcode 5和iOS 7 SDK GM.但是我意识到持久性存储的不同行为(即a UIManagedDocument):在iOS 7构建之前,persistentStore文档文件夹中只有一个文件(有时还有第二个文件persistentStore-journal).
在iOS 7构建(干净安装)中,持久性存储现在有三个文件:
persistentStorepersistentStore-wal 和persistentStore-shmApple现在默认将日志模式更改为WAL吗?我想知道我的应用程序是否有影响(想想用户如何从上一版本更新)?是否最好禁用WAL - 如果是这样,我怎么能用iOS 7/UIManagedDocument?
core-data ×10
ios ×7
objective-c ×5
iphone ×2
xcode ×2
blocking ×1
cocoa ×1
cocoa-touch ×1
exception ×1
ios5 ×1
ios7 ×1
ios9 ×1
nsuinteger ×1
setter ×1
sqlite ×1