我使用获取请求和谓词从Core Data持久性存储中获取一组对象.我当前的谓词只是检查属性是否> =某个值.这一切都很好,除了我想最终排除当前在数组中保存的任何对象.
我基本上需要能够排除一组对象,我认为我能做到这一点的唯一方法是能够objectID从我的托管对象数组中获取一个列表,并在我的谓词中创建另一个表达式以确保任何对象返回不一样objectID.IE @"ANY records.objectID NOT IN %@", arrayOfObjectID.
我怎样才能做到这一点?
我正在使用Core Data作为表格视图,我想使用每个结果的第一个字母作为节标题(所以我可以在侧面获得节索引).有没有办法用关键路径做到这一点?像下面的东西,我name.firstLetter用作sectionNameKeyPath(不幸的是,这不起作用).
我是否必须手动抓取每个结果的第一个字母并创建我的部分?是否更好地放入一个新属性来保存第一个字母并将其用作sectionNameKeyPath?
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"name.firstLetter"
cacheName:@"Root"];
Run Code Online (Sandbox Code Playgroud)
谢谢.
**编辑:**我不确定它是否有所作为,但我的结果是日语,按片假名排序.我想用这些片假名作为部分索引.
我的datamodel中有一个实体,其字符串属性当前是可选的,我想将其转换为必需属性,其默认值为空字符串.
正如其他人发现的那样,在Xcode CoreData数据建模器中将默认值保留为空会导致验证错误(因为设计者将此解释为NULL),但尝试使用'',""或@""作为默认值会导致这些文字根据需要,字符被解释为默认字符,而不是空的零长度字符串.
我确实在谷歌上发现了这个帖子,但是,除了解决方案真的很丑陋(模型定义在.xcdatamodel和objc源之间拆分)之外,它也不适用于轻量级迁移,因为这些迁移完全基于.xcdatamodel文件和实体实现中的objc逻辑未加载.
有没有办法在数据模型设计师中实现这一目标?
我不确定我在这里做错了什么,但是当我第一次保存到coredata时,它运行得很好.当我试图覆盖它时,它没有.
func testStuff() {
var token = loadLoginData()
println("Token \(token)")
saveLoginData("New Token")
var newToken = loadLoginData()
println("Token \(newToken)")
}
func saveLoginData(accessToken: String) {
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context: NSManagedObjectContext = appDel.managedObjectContext!
// save data to core data
var loginData = NSEntityDescription.insertNewObjectForEntityForName("LoginData", inManagedObjectContext: context) as NSManagedObject
loginData.setValue(accessToken, forKey: "accessToken")
context.save(nil)
println("Done saving user")
}
/* Output
Token Optional("12345")
Done saving user
Token Optional("12345")
*/
Run Code Online (Sandbox Code Playgroud)
加载登录数据启用调用saveLogin数据的函数
func loadLoginData() -> String? {
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) …Run Code Online (Sandbox Code Playgroud) 我正在使用CoreData,在一个名为"RoleName"的实体上.
问题是:我在我的模型中单击"Create NSManagedObject subclass",因此它会自动为我的实体创建类.
但是,在类的声明中,我收到此错误:
无效的"RoleName"重新声明
即使我没有任何其他同名的课程.
我有一个Person属性的实体personId(personId是唯一的)
如何获取max personId的Person?
(我想取这个人本身而不是财产的价值)
是否可以像在原始应用程序中那样在swift的今天扩展中使用我的CoreData模型?如果是,我该如何创建NSManagedObjectContext?
我真的不知道,除了group-identifier之外,但不幸的是我不知道如何获取上下文..
过去我创建的应用程序在开头检查我想要使用CoreData然后我得到了managedObjectContext通过我的AppDelegate ..但我怎么能在扩展中做那样的想法?Apple不提供相关信息..
我在AppDelegate中编辑了这一行:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HTWcampus.sqlite"];
Run Code Online (Sandbox Code Playgroud)
对此(在将组包括在两个目标之后):
NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.BenchR.TodayExtensionSharingDefaults"];
storeURL = [storeURL URLByAppendingPathComponent:@"HTWcampus.sqlite"];
NSLog(@"StoreURL2: %@", storeURL);
Run Code Online (Sandbox Code Playgroud)
有了这个,我的应用程序中的现有数据库就消失了(这很棒,因为我认为将数据库放在共享段中是有效的).
但是如何在扩展中创建我的上下文实例?我怎样才能访问我的NSManagedObject-subclasses?
在扩展中,我有这个代码到目前为止:
var context: NSManagedObjectContext!
override func viewDidLoad() {
super.viewDidLoad()
var storeURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.BenchR.TodayExtensionSharingDefaults")
storeURL = storeURL?.URLByAppendingPathComponent("HTWcampus.sqlite")
let modelURL = NSBundle.mainBundle().URLForResource("HTWcampus", withExtension: "momd")
let model = NSManagedObjectModel(contentsOfURL: modelURL)
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: nil)
context = NSManagedObjectContext()
context.persistentStoreCoordinator = coordinator
}
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?如果是的话,我怎样才能获得我的NSManagedObject-Subclasses?我是否必须将momd文件添加到扩展目标?如果是的话,我该怎么做?
我正在尝试创建一个框架来保存在iOS和OS X上运行的应用程序的公共实体类.目前我只是在每个目标中包含文件,但这需要更改数据模型,以便从当前目标获取类(因为在Swift中你必须指定模型文件中具有类的模块).这当然意味着我有时会忘记,事情不起作用.
显而易见的解决方案是创建一个包含实体类的共享框架,以便数据模型始终指向同一个位置.
问题是似乎没有任何方法可以创建构建在两个平台上的框架.
有没有人找到一种方法来创建一个适用于两个平台的单一框架或库?
如何比较NSPredicate中的两个NSNumber或NSNumber和Integer?
我试过了:
NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];
Run Code Online (Sandbox Code Playgroud)
嗯,这不起作用......任何人都知道如何做到这一点?我确定它很简单,但我找不到任何东西......
现在这可能看起来像一个重复的线程,但我的问题是我已经阅读了很多问题,如核心数据与SQLite 3和其他人,但这些都是2 - 3年.我还读到FMDB是由于iOS上不支持核心数据而开发的,因此不应再使用它了.而另一方面,我已经读过,不应该将核心数据用作数据库.
所以我很困惑,我是否应该使用核心数据进行对象存储.我的意思是在什么基础上我应该决定使用哪个?是否有苹果或其他人提供的指导方针......或者是时间会来找我的东西.
core-data ×10
ios ×6
iphone ×3
swift ×3
ios8 ×2
objective-c ×2
cocoa-touch ×1
fetch ×1
fmdb ×1
frameworks ×1
macos ×1
migration ×1
nspredicate ×1
predicate ×1
sqlite ×1
string ×1
uitableview ×1
xcode ×1