我已经阅读了很多关于NSManagedObject,Apple文档以及更多内容的SO问题,但我仍然没有真正得到NSManagedObject的子类 - 它起什么作用?
在Apple文档中,它讨论了我如何不能覆盖一堆方法,不应该使用自定义实例变量,blah和blah(我还不了解其中的一些),等等 - 所以我该怎么做使用NSManagedObject?有哪些限制,必须遵循的指导方针,以及哪些不是限制?
我正在尝试制作一个小盒子绘图程序来学习Core Data,我正在考虑将"draw"方法添加到NSManagedObject的子类中,以便视图可以告诉它们为自己绘制 - 这是允许的吗?
所以,我的一句话中的问题是,子类化NSManagedObject和任何其他类之间的"真正"区别是什么 - Core Data用它做什么?
如果这太宽泛,我会尝试缩小我的问题或者其他什么.
从NSManagedObjectContext内部 - 保存:我收到此消息:
断言失败:(_ Unwind_SjLj_Resume()无法返回),函数_Unwind_SjLj_Resume,文件/SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c,第326行.
程序收到信号:"SIGABRT".
警告:无法读取/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1(8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib(未找到文件)的符号.
当我使用Run删除带有to-many的Experiment对象时,会发生这种情况,其中包含Sample,其中包含与Data一起使用的Sample.实验也有许多与页面有很多与显示,其中有许多运行.我提到这一点是为了指出图的周期性.这是一个简化的模型图:

实验用户与之交互的顶级实体.实验包含多个Run对象.运行是从特定时间开始并在稍后结束的数据集合.由于可以同时从多个源收集数据,因此每个Run的每个源都有一个Sample.实验包含数据,需要查看和交互此数据.因此,每个实验都有一些页面对象,每个页面包含一些显示(例如,图形,米).显示器配置为显示属于实验的运行的某个子集.因此,虽然实验可能包含数十个运行,但其中一个页面一次只会显示一些运行.Display实体维护此列表.显示不是视图.视图将引用Display对象并通知Display对象的更改.
我一直在使用删除规则,但现在已经切换到"无操作"删除规则以及所有这些类的-prepareForDeletion方法.这种变化没有任何区别.在这两种情况下,错误消息都是相同的.
有趣的是,当我重新启动应用程序时,所有标记为删除的对象都已被删除.
此外,如果实验没有运行对象,则删除工作没有发生.就此而言,从实验中删除单个Run也可以.
我希望有人见过这样的东西,可以提供有关导致这种情况的建议.或者,如果某人有关于如何获取iOS 4.2.1的libXcodeDebuggerSupport.dylib的建议,那么这可能也会有所帮助.
更新:我按照这里的建议,并能够让Xcode找到适用于iOS 4.2.1的libXcodeDebuggerSupport.dylib.但这对诊断问题毫无帮助 - 这种问题依然存在.
更新2:在阅读了一下并下载unwind-sjlj.c的版本之后,似乎我正在处理类似未捕获的异常.我不确定这对我有什么帮助......
更新3:感谢堪察加,我做了几天前我应该做的事情:打开"停止Objective-C Exceptions".这让我看到仍然保留了对已删除对象的引用 - 更糟糕的是,键值观察了已删除的对象.解决了这个固定的问题,我能够恢复使用删除规则而不是-prepareForDeletion方法.
现在Xcode4已公开发售,我正在将这个问题从Apple的秘密开发论坛中移出:
有人可以解释为什么在以下过程中生成的代码与Xcode3中的代码不同?代码更好还是可能是错误?
我使用Core Data自定义托管类,这是我在Xcode3中遵循的过程:
现在,在Xcode4中,我认为这是如何做到的,但我不确定,因为它生成不同的代码:
它产生的代码有很多不同之处:
例如,Xcode3会在HEADER文件中生成此代码:
@interface SampleEntity (CoreDataGeneratedAccessors)
- (void)addChildObject:(Child *)value;
- (void)removeChildObject:(Child *)value;
- (void)addChild:(NSSet *)value;
- (void)removeChild:(NSSet *)value;
@end
Run Code Online (Sandbox Code Playgroud)
现在,Xcode4在IMPLEMENTATION文件中生成此代码:
@implementation SampleEntity
@dynamic children;
- (void)addChildObject:(Child *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"children"] addObject:value];
[self didChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}
Run Code Online (Sandbox Code Playgroud)
有人可以权衡为什么这是不同的?Xcode4代码感觉不喜欢这种生成NSManagedObject子类的新方法.
我正在尝试CoreData在iosApplication中实现,现在我想从Entity获取所有记录MUSTHAFA
My NSManagedObjectedSubClass is MUSTAHFA
Run Code Online (Sandbox Code Playgroud)
MUSTHAFA.m
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface MUSTHAFA : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * FirstName;
@property (nonatomic, retain) NSNumber * Age;
@property (nonatomic, retain) NSString * Location;
@property (nonatomic, retain) NSString * LastName;
@end
#import "MUSTHAFA.h"
@implementation MUSTHAFA
@dynamic FirstName;
@dynamic Age;
@dynamic Location;
@dynamic LastName;
@end
Run Code Online (Sandbox Code Playgroud)
将记录添加到核心数据
-(void)AddRecordToCoreData{
//NSLog(@"______ ADD Core Data Implementaion");
MUSTHAFA *event = (MUSTHAFA *)[NSEntityDescription insertNewObjectForEntityForName:@"MUSTHAFA" inManagedObjectContext:managedObjectContext];
[event setLastName:@"JOHN"];
[event setFirstName:@"JOSE "];
[event …Run Code Online (Sandbox Code Playgroud) core-data objective-c nsmanagedobject nsmanagedobjectcontext ios
这三类[NSManagedObject , NSManagedObjectContext , NSManagedObjectModel ]核心数据之间有什么区别?我们如何以最简单的方式描述?
我目前正在Swift中编写一个简单的电话簿应用程序,需要对CoreData查询中的结果进行排序.
基本上,我设置了一个名为"Directory"的NSManagedObject,其中包含相应的字段名称 - 例如"name_f"是用户的名字.
查询的CoreData数据库中的名称按字母顺序排列.但是,尽管第一次搜索按字母顺序返回结果,但有时不会在程序的其他区域查询数据库之后进一步搜索.我不确定为什么会这样,但是想要放入代码来通过任何字段主动对返回的数组进行排序.
我返回NSManagedObject数组的代码如下:
func SearchName(nameToSearch: String) -> NSArray {
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext! //I added the !
let request = NSFetchRequest(entityName: "Directory")
request.returnsObjectsAsFaults = false //will return the instance of the object
//request.predicate = NSPredicate(format: "name_f = %@", nameToSearch)
//request.predicate = NSPredicate(format: "name_f MATCHES '.*(\(nameToSearch)).*'")
request.predicate = NSPredicate(format: "name_f MATCHES[cd] '(\(nameToSearch)).*'")
var results:NSArray = context.executeFetchRequest(request, error: nil)
return results
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我使用以下代码从返回的结果中提取特定值(其中searchResult是SearchName所在的类的实例):
var particularEntry = self.searchResult[self.selectedItem] as Directory
lblDetailName.text = thisPerson.name_f
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够:1 …
我的应用程序有两个标签栏...每个用户都带一个tableviewcontroller,向他提供一个项目列表.第一个视图允许用户记录数据库中的条目.另一个选项卡/视图从数据库读取并将这些项呈现给用户,但是,没有从第二个视图对coreData/persistant存储进行更新.
当我通过第一个viewcontroller添加一个新项目时,它在视图中完美显示.但是,只要我点击另一个标签栏以查看新项目出现在该viewcontroller中,我就会收到下面列出的错误,并且新添加的项目不会出现...注意:如果我停止应用并重新加载/重新运行它,并通过点击第二个标签栏开始,新项目显示正常,所以我知道模型正在更新.
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:1046
2011-10-20 20:56:15.117 Gtrac[72773:fb03] CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from …Run Code Online (Sandbox Code Playgroud) iphone core-data uitableview nsfetchedresultscontroller nsmanagedobject
我正在遇到开发我的iPhone应用程序的主要问题.
这是完整的错误:
CoreData: error: Serious application error. Exception was caught during Core Data
change processing. This is usually a bug within an observer of
NSManagedObjectContextObjectsDidChangeNotification. -[TimeSpentStudying coordinate]:
unrecognized selector sent to instance 0x21db92d0 with userInfo (null)
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我有两个coreData实体(Locations&TimeSpentStudying).但我不认为那些是问题.[TimeSpentStudying coordinate]很奇怪,因为我没有coordinate在TimeSpentStudying核心数据类上发送过属性
我有一个mapView设置,当用户点击mkannotationview上的详细信息披露按钮时,会弹出一个新视图(LibraryTrackTimeViewController),但几乎无法使用.我尝试在viewDidLoad中调用NSLog,但没有出现任何内容.
mapViewController.m
#pragma mark - NSNotification
- (void)contextDidChange:(NSNotification *)notification
{
if ([self isViewLoaded]) {
[self updateLocations];
}
Run Code Online (Sandbox Code Playgroud)
.
- (void)updateLocations
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSError …Run Code Online (Sandbox Code Playgroud) 我希望加快查询我的SQL支持的CoreData实例(显示按日期排序的记录).我知道索引可以帮助减少查询时间,但有什么区别:
突出显示属性所属的实体,然后将以逗号分隔的属性列表添加到索引字段中,如下所示:
或突出显示该属性,然后检查索引框,如下所示:
我的核心数据模型中有一个实体,如下所示:
@interface Selection : NSManagedObject
@property (nonatomic, retain) NSString * book_id;
@property (nonatomic, retain) NSString * contenu;
@property (nonatomic, retain) NSNumber * page_id;
@property (nonatomic, retain) NSNumber * nbrOfOccurences;
@property (nonatomic, retain) NSString * next;
@property (nonatomic, retain) NSString * previous;
Run Code Online (Sandbox Code Playgroud)
我创建了很多Selections并将它们保存在Core Data中,现在我想删除一些带有一些标准的选择.例如,Selection如果匹配以下内容,我想删除一个对象:
content = test
page_id = 5
book_id = 1331313
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
core-data ×10
nsmanagedobject ×10
ios ×5
iphone ×5
cocoa ×2
objective-c ×2
arrays ×1
search ×1
sqlite ×1
swift ×1
uitableview ×1
xcode4 ×1