我有一个接收类类型的方法:
public static func download<T:NSManagedObject>(_ classType:T.Type){
...
}
Run Code Online (Sandbox Code Playgroud)
我需要从一个只有可用的地方调用这个方法NSEntityDescription,所以基本上只有一个managedObjectClassName可用的字符串(据我所知)。
我尝试了以下代码:
let entityClass = NSClassFromString(entity.managedObjectClassName) as? NSManagedObject.Type
Run Code Online (Sandbox Code Playgroud)
但随后我获得了对该类的引用NSManagedObject,并且我需要访问子级的静态属性
有任何想法吗?
预先非常感谢
我正在使用Objective-CCoreData,但遇到以下错误...
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“类“NSManagedObject”的 NSManagedObject 必须具有有效的 NSEntityDescription。”
我添加CoreData到我的项目中。我saveData在 中创建了方法viewControllerA并在 中调用了它viewControllerB。
在这种情况下,如果我调用 saveData 方法,它会正常工作,viewDidLoad我会收到错误。viewControllerA
In AppDelegate.h
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
In AppDelegate.m
#pragma mark - Core Data stack
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
- (NSURL *)applicationDocumentsDirectory {
// The directory the application uses to store the Core Data …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象。我一直在浪费时间试图弄清楚但无法解决。我不断收到两个错误:无法将属性标记为@NSManaged,因为它的类型无法在 Objective-C 中表示,并且属性无法声明为公共,因为它的类型使用内部类型。
非常感谢您的帮助。谢谢。
我有一个名为 User 的 CoreData 对象。我还有一个名为 Site 的对象。
我不希望 Site 对象成为 CoreData 对象,因为大多数时候我创建 Site 对象时都不希望将其添加到 CoreData 上下文中。
下面您将看到“Site”类型的“primarySite”和“sites”,它是“Site”类型的数组。这两行给出了我上面列出的相同的两个错误。
用户+核心数据类
import Foundation
import CoreData
public class User: NSManagedObject {
}
Run Code Online (Sandbox Code Playgroud)
用户+核心数据属性
import Foundation
import CoreData
extension User {
@nonobjc public class func fetchRequest() -> NSFetchRequest<User> {
return NSFetchRequest<User>(entityName: "User");
}
@NSManaged public var firstName: String?
@NSManaged public var lastName: String?
@NSManaged public var role: String?
@NSManaged public var primarySite: Site
@NSManaged public var …Run Code Online (Sandbox Code Playgroud) 我正在尝试有效地批量删除大量NSManagedObjects (不使用NSBatchDeleteRequest)。我一直遵循这个答案中的一般过程(适用于 Swift),通过批处理请求对象、删除、保存然后重置上下文的操作。我的获取请求设置includesPropertyValues为false.
然而,当它运行时,当每个对象从上下文中删除时,错误就会被触发。添加日志记录如下:
// Fetch one object without property values
let f = NSFetchRequest<NSManagedObject>(entityName: "Entity")
f.includesPropertyValues = false
f.fetchLimit = 1
// Get the result from the fetch. This will be a fault
let firstEntity = try! context.fetch(f).first!
// Delete the object, watch whether the object is a fault before and after
print("pre-delete object is fault: \(firstEntity.isFault)")
context.delete(firstEntity)
print("post-delete object is fault: \(firstEntity.isFault)")
Run Code Online (Sandbox Code Playgroud)
产生输出:
pre-delete object is fault: true …
我有一个简单的核心数据实体Story,偶尔会使用网络调用中的最新数据进行更新。此网络调用有时会更新很多很多故事实例,因此我运行一个NSBatchInsertRequest,如下所示。(我使用批量插入的另一个原因是可能需要将许多故事添加到持久存储中。)
问题是用户可能已经将 a 标记Story为收藏夹。当他们这样做时,我设置story.isFavorite = true主线程并保存viewContext。
但是,当发生批量插入时,它会覆盖story.isFavorite,将其设置回false,即使我NSMergeByPropertyObjectTrumpMergePolicy同时在批量插入和视图上下文中使用。我也没有接触story.isFavorite批量插入处理程序,因此我不希望该属性被覆盖。
我认为使用此合并策略进行批量插入的好处是避免首先获取+然后手动更新更改的属性+最后保存。避免更改 中的属性值的正确方法是什么NSBatchInsertRequest?
@objc(Story)
public class Story: NSManagedObject {
@NSManaged public var title: String?
@NSManaged public var storyURL: URL?
@NSManaged public var updatedTime: Date?
@NSManaged public var isFavorite: Bool // <- the problem property
}
Run Code Online (Sandbox Code Playgroud)
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = false
let context = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
context.parent = container.viewContext
context.mergePolicy = …Run Code Online (Sandbox Code Playgroud) core-data nsfetchedresultscontroller nsfetchrequest nsmanagedobject nsmanagedobjectcontext
我有一个核心数据存储设置与Xcode生成的NSManagedObject的子类:注意.
我可以使用NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:没有问题,但是当我尝试这样做时:
NSManagedObjectContext* moc = [(QuickTextAppDelegate*)([[UIApplication sharedApplication] delegate]) managedObjectContext];
Note* note = [[Note alloc] initWithEntity:@"Note" insertIntoManagedObjectContext:moc];
Run Code Online (Sandbox Code Playgroud)
我收到一个EXC_BAD_ACCESS错误.
使用断点我可以看到NSManagedObjectContext*确实指向了一个有效的对象.
任何帮助,将不胜感激!
我有一个实体库,它包含两个书籍列表.图书馆保留这两本书籍非常重要.在我的图书馆实体上,我有一个从每个列表到我的图书实体的一对多的关系.同样,Book有一个关系"库".我的数据从数据库中删除时出现了一些问题,我发现我应该设置反向关系以帮助保持数据完整性.但是,在这种情况下,Book会希望能够与我的Library实体上的每个列表建立反向关系.我怎么能做到这一点?
我天真的第一个想法是为两个列表实现关系.因此,一本书有一个关系"libraryForList1"和"libraryForList2",因此它可以为每个关系提供一个反转.我永远不必实际引用这些属性,因为根据Core Data规范,如果我将一本书添加到其中一个库列表中,它会自动将库设置为该书籍所有者.
在我的iPhone应用程序中,我有两个viewControllers:viewController1有一个tableView,它显示了Item1对象的列表viewController2有一个tableView,它显示了Item2对象的列表
其中Item1类和Item2类继承自抽象类ParentItem.
现在我想让Item2对象成为NSManagedObject,这样我就可以将它保存在设备上,并使viewController2使用NSFetchedResultsController来加载带有Item2对象的tableView.
但我不希望Item1成为NSManagedObject,我想将它用作常规对象.
问题是,如果我创建ParentItem类作为NSManagedObject,那么Item1类也将是一个NSManagedObject,我不能将它用作常规对象(我的意思是我不能用常规的alloc-init创建一个Item1对象,或者可以一世???)
如果我创建ParentItem类作为常规NSObject,那么Item2类也将是常规NSObject.
我正在使用Core Data来存储对象.我有一个NSManagedObject人和一个NSObject人.它们都具有相同的属性.在NSObject有一些方法.
现在,我为Bob搜索Core Data.然后我拿起NSManagedObjectBob并将所有属性复制到NSObjectBob并用它做我需要的.
这是否有意义或者我应该创建所需的方法NSManagedObject?可以NSManagedObject像对待一样对待NSObject吗?
在我的项目中,我正在使用coredata.其中一个实体有一个名为newTotal的属性,在其对应的NSManagedObject类中属性声明就像
@property (nonatomic, strong) NSString *newTotal;
Run Code Online (Sandbox Code Playgroud)
如果我在NSObject子类中添加这样的属性,XCode将显示如下错误
error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
Run Code Online (Sandbox Code Playgroud)
但是在NSManaged对象子类中,它没有显示错误,但是当访问属性时应用程序崩溃,就像EXC_BAD_ACCESS一样.
为什么XCode没有显示错误但是应用程序崩溃了?这是XCode/clang/LLVM的错误吗?
我知道它与合成相关的东西.NSManagedObject子类没有合成其中的属性,但@dynamic指令只是告诉编译器getter和setter方法不是由类本身实现,而是由其他地方实现(如超类或将在运行时提供).但我对此没有明确的想法.任何人都可以对这个问题有一个清晰的认识吗?
core-data ×10
nsmanagedobject ×10
ios ×6
objective-c ×5
swift ×3
cocoa ×1
database ×1
inheritance ×1
iphone ×1
llvm-clang ×1