我昨天刚开始使用CoreData,我疯了:(我创建了一个使用CoreData的项目(勾选方框 - 使用CoreData).创建实体,然后为所有实体创建NSManagedObject类(我猜他们创建实体的'setter'和'getter'方法).
现在,我在AppDeletegate中#imported所有这些类,并在我的applicationDidFinishLaunching方法中写了这个:
(订阅是申请中的实体之一)
NSManagedObjectContext *context = [self managedObjectContext];
Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
[sbs setTitle:@"OK"];
[sbs setType:@"Tag"];
[sbs setCode:@"cars"];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Couldn't create the subscription");
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到此错误
[NSManagedObject setTitle:]:无法识别的选择器发送到实例0x6160550
我不知道为什么会这样.请帮忙!!!在此先感谢大家!
添加Subscriptions
Subscriptions.h 的标题
@interface订阅:NSManagedObject {
}
@property(nonatomic,retain)NSString*Type;
@property(nonatomic,retain)NSDecimalNumber*Read;
@property(nonatomic,retain)NSString*Title;
@property(nonatomic,retain)NSString*Code;
@property(nonatomic,retain)NSDecimalNumber*New;
@结束
我什么都没改变.就像Xcode创建它一样.
我有一个自定义类,它是一个子类NSManagedObject.我想将它存储在字典中,但是当我尝试这样做时,我收到一个Property list invalid for format: 200错误.
以下是我尝试创建字典的方法:
NSDictionary *dictionary =
[NSDictionary dictionaryWithObject: voiceMemo forKey:@"voiceMemo"];
Run Code Online (Sandbox Code Playgroud)
尝试时结果相同
NSDictionary *dictionary =
[NSDictionary dictionaryWithObject: (NSData *) voiceMemo forKey:@"voiceMemo"];
Run Code Online (Sandbox Code Playgroud)
但是,在尝试单独保存各个属性时,它可以正常工作:
NSDictionary *dictionary =
[NSDictionary dictionaryWithObject: voiceMemo.attribute forKey:@"attribute"];
Run Code Online (Sandbox Code Playgroud)
NSDictionary应该能够存储数据对象,所以我猜,真正的问题是如何将NSManagedObject对象转换为NSData
当创建一个扩展助手来NSManagedObject创建一个新的托管对象子类时,swift提供了Self模仿的类型,instancetype这很好,但我似乎无法进行类型转换AnyObject.下面的代码没有编译错误'AnyObject'不能转换为'Self'
救命?
extension NSManagedObject
{
class func createInContext(context:NSManagedObjectContext) -> Self {
var classname = className()
var object: AnyObject = NSEntityDescription.insertNewObjectForEntityForName(classname, inManagedObjectContext: context)
return object
}
class func className() -> String {
let classString = NSStringFromClass(self)
//Remove Swift module name
let range = classString.rangeOfString(".", options: NSStringCompareOptions.CaseInsensitiveSearch, range: Range<String.Index>(start:classString.startIndex, end: classString.endIndex), locale: nil)
return classString.substringFromIndex(range!.endIndex)
}
}
Run Code Online (Sandbox Code Playgroud) 我在实体A和实体B(单面)之间有一对一的关系,例如名为bRel.我有NSAtomicStore(MyStore)和NSAtomicStoreCacheNode(MyCacheNode)的子类.在load:MyStore 的方法中,我为实体A和B(aNode和bNode)创建MyCacheNode实例,并为每个实例分配相应的propertyCache字典.propertyCache for aNode包含key的bNode @"bRel".
aManagedObject是正常创建的,并且所有属性都有效.但是当aManagedObject通过它访问bManagedObject时aManagedObject.bRel.someAttribute,bManagedObject仍然是错误的.bManagedObject没有收到awakeFromInsert或awakeFromFetch.bNode和bManagedObject共享相同的实例managedObjectID.当bManagedObject访问someAttribute时,bNode处于活动状态.当aManagedObject访问其属性时,它将通过valueForKey:MyCacheNode.当bManagedObject执行时,我们无法实现.
bManagedObject根本就不会发射.
谁能想到我应该在这种情况下检查什么?
attributes entity-relationship core-data objective-c nsmanagedobject
我有一个有3个实体的一级方程式比赛的数据模型:

如果我生成NSManagedObject子类来表示这些实体,则生成的代码根本不代表这个设计:
NSManagedObjectNSManagedObject团队而非团队这是预期的行为吗?我应该修复Xcode生成的代码吗?我错过了什么吗?
顺便说一下,我正在使用Xcode 4.3.3
除了向我的Core Data存储中的每个Entity添加NSDate属性之外,是否有一种编程方式来获取任何对象的修改日期?
我是核心数据的菜鸟,所以这里.
我有一个核心数据对象,例如学生.
学生具有鬃毛属性,如姓名,年龄,dob,地址等.
现在我需要将所有这些属性显示到表视图中.
是否有任何简单的方法来迭代对象学生?或者我必须将数据转换为某种类型的字典?
如果我需要将其转换为字典,是否有任何支持?或者我必须自己写这个功能.
非常感谢你的帮助,斯蒂芬
Quirk我刚刚发现,并想与这里的任何人确认这是否可以避免.基本上,如果我有一个非常简单的两个实体模型:

随着之间的一对多关系Entity1和Entity2.该关系是可选的,在双方都是nullify作为删除规则.但是,如果我插入一个新Entity1的children关系值将是一个空集,而不是nil:
NSManagedObject *object = [NSEntityDescription
insertNewObjectForEntityForName:@"Entity1"
inManagedObjectContext:[self managedObjectContext]];
assert([object valueForKey:@"children"] != nil);
Run Code Online (Sandbox Code Playgroud)
此外,我无法明确将关系设置为nil:
[object setValue:nil forKey:@"children"];
assert([object valueForKey:@"children"] != nil);
Run Code Online (Sandbox Code Playgroud)
我已经在一个新的,最小的项目中验证了这一点,这似乎是一个真正的实现细节.问题是,我希望能够区nil分值(表示当前未知)和空集(真正的零到零关系).CoreData是否真的以合理直接的方式支持这一点?目前似乎没有,这意味着我将不得不寻找另一种(不太直接)的方式来表示我的模型.
谢谢,
Ĵ
我不确定我对核心数据关系的理解是否有缺陷,因为我似乎无法实现我想要做的事情.
我创建了2个实体来管理应用程序上的聊天,以及用户和消息之间的一对多关系.因此,用户可以拥有许多消息,但消息只有您的用户(创建者).

我正在尝试在ChatUser添加新消息时更新实体关系,从而建立ChatUserID和ID 之间的连接ChatMessage.我可以这样做,但是当我向现有消息添加新消息时会出现问题userId.当前正在尽管做到的就是增加一个额外的userId进入ChatUser,而不是只添加到现有的关系UserId.
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error = nil;
// 4 . Get Timestamp for Rippll
float timestamp = @([[NSDate date] timeIntervalSince1970]).floatValue;
NSString * jayID = @"eu-west-1:be6457ce-bac1-412d-9307-e375e52e22ff";
NSString *message = @"Science string!";
// Create a new managed object
ChatUser *chatUserManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"ChatUser" inManagedObjectContext:context];
Chat *chatManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"ChatMessage" inManagedObjectContext:context];
Timeline *timelineManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Timeline" inManagedObjectContext:context];
// 3 . Save Timeline
[timelineManagedObject …Run Code Online (Sandbox Code Playgroud) core-data objective-c nsfetchedresultscontroller nsmanagedobject ios
我已经阅读了很多关于NSManagedObject,Apple文档以及更多内容的SO问题,但我仍然没有真正得到NSManagedObject的子类 - 它起什么作用?
在Apple文档中,它讨论了我如何不能覆盖一堆方法,不应该使用自定义实例变量,blah和blah(我还不了解其中的一些),等等 - 所以我该怎么做使用NSManagedObject?有哪些限制,必须遵循的指导方针,以及哪些不是限制?
我正在尝试制作一个小盒子绘图程序来学习Core Data,我正在考虑将"draw"方法添加到NSManagedObject的子类中,以便视图可以告诉它们为自己绘制 - 这是允许的吗?
所以,我的一句话中的问题是,子类化NSManagedObject和任何其他类之间的"真正"区别是什么 - Core Data用它做什么?
如果这太宽泛,我会尝试缩小我的问题或者其他什么.
nsmanagedobject ×10
core-data ×9
ios ×5
iphone ×3
objective-c ×3
attributes ×1
cocoa ×1
cocoa-touch ×1
nsdictionary ×1
null ×1
one-to-many ×1
relationship ×1
swift ×1
xcode ×1