我想创建一个NSSagedObject与NsDictionary的内容.和Visa Versa.
我有一个带有对象和键的NSDictionary,它从MYSQL数据库引入并存储到documents目录中.我找不到编辑字典的好信息,所以我想我会尝试NSManaged Object.
如果Object属性发生了变化,我希望能够反转该过程并将对象发回.
找到这个例子的任何帮助都会很棒.
谢谢,
迈克尔
如果我创建了NSManagedObject Subclass的子类,我会在实现文件Business.m上看到这些函数(例如)
这些函数都没有在头文件Business.h中声明.我必须亲自补充一下
- (void)addDistrictsObject:(District *)value;
- (void)addCategoriesObject:(Category *)value;
- (void)addReviewsObject:(Review *)value;
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我必须手动添加这些声明?当我尝试生成SubClass时为什么不自动?
以下是功能:
- (void)addPromotionsObject:(Promotion *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"Promotions"] addObject:value];
[self didChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (void)removePromotionsObject:(Promotion *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"Promotions"] removeObject:value];
[self didChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (void)addPromotions:(NSSet *)value {
[self willChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"Promotions"] unionSet:value];
[self didChangeValueForKey:@"Promotions" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
} …Run Code Online (Sandbox Code Playgroud) 我看到有一种获取托管对象的唯一ID的方法:
NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)
但是,正如我所读到的那样,它会在保存时发生变化.
有什么更好的方法来创建我自己的唯一ID并将其保存在每个对象中,确保它是唯一的并且不会改变?
我在我的应用程序中有一个简短的设置过程,我创建了一个NSManagedObject来存储个人的名称和其他详细信息,但是在此设置期间我不想保存对象,直到用户在结束时按下"完成".设置(只是因为任何原因他们取消设置).
那么是否可以保持持有我的信息的对象很短的时间直到设置过程结束而不实际将其保存到CoreData中?
core-data objective-c nsmanagedobject nsmanagedobjectcontext ios
在我的核心数据模型中,a Person有一个或多个Cars,由无序的多对多关系'Cars'指定.通常情况下,我需要检索一个人的汽车datePurchased,或通过dateLastUsed.
到现在为止,我已经将我自己的方法来Person进行carsByDatePurchased.这使用排序描述符对NSSet进行排序cars并返回NSArray.
可能/我应该使用Fetched Property吗?每次我需要按特定顺序购买汽车时,我会遇到使用排序描述符的一些性能开销,甚至可能实现我自己的缓存carsByDatePurchased.看起来像是为我缓存了获取的属性 - 这是正确的吗?
获取属性与我自己的实现有什么限制?
至关重要的是,获取的财产的价值在执行之间是否仍然存在?如果我更新了fetched属性并保存了我的上下文,那么下次启动应用程序时是否存储了值?
我对如何使用一些核心数据的NSManagedObject子类来处理持久数据和非持久数据有一些想法.
假设您有一个配方应用程序,显示您自己的CoreData配方列表,在同一个应用程序中,您也可以搜索其他用户配方.这些其他用户配方当然来自API,我们不希望将它们保存到核心数据中.但我们想要的是我们的配方细节View Controller,无论是给定持久配方还是非持久性配方,它都可以起作用.我自然认为我们应该在数据周围使用相同的对象包装器,让我们的View Controller对数据的来源视而不见.
问题是NSManagedObject子类不能手动初始化,必须插入上下文.这对我们的其他用户食谱不利.另一方面,对于我们自己的配方,我们需要将这些对象插入到上下文中.
我有几个解决方案,但我真的很想看看你们对这个问题的看法.
您是否认为这是一些实现问题,应该通过将两个数据对象包装到一个对象中来解决?例如,通过覆盖所有getter和setter来处理coredata对象和NSDictionary对象?
或者它是一个体系结构问题,您可以通过嵌套NSManagedContext或使用多个持久性存储(一个在内存中,另一个在Sqlite中)来解决它?
我正在使用RestKit RKObjectManager从我的服务器获取数据并存储在核心数据中(参见我的其他帖子)
我想配置数据库中剩余的旧条目的删除行为.
我看到RKEntityMapping类中有一个deletionPredicate属性,但我知道只有当服务实际返回标记为"要删除"的要删除的对象时才会使用它.(我对吗?)
在我的情况下,当一些对象必须被删除时,它们只是不被服务器返回,我想让我的客户端应用程序理解这意味着它应该删除它们.
那可能吗?如果是这样,怎么样?
编辑:
好的,我查看了该链接,并将此获取请求块添加到我的RKObjectManager:
[[RKObjectManager sharedManager] addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"/path_to_ressource"];
NSDictionary *argsDict = nil;
BOOL match = [pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:NO parsedArguments:&argsDict];
if (match) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"entityId" ascending:YES] ];
return fetchRequest;
}
return nil;
}];
Run Code Online (Sandbox Code Playgroud)
我保留了sortDescriptor,但这里的目的究竟是什么?
我已经寻找了一段时间的解决方案,而且我总是放弃并找到一个解决方法,但是有谁知道如何NSManagedObjectContext从一个实例中找到它NSManagedObject?
我目前正在使用3个上下文,我想检索一个对象的实例所在的上下文.有没有人知道这样做的方法?
core-data objective-c nsmanagedobject nsmanagedobjectcontext ios
Xcode 6有很多错误.但我不太确定这是不是一个bug.可能不是因为这是我刚刚学习的东西.
我的问题是,每当我尝试实例化NSManagedObject的子类时,我都没有选择将entity: NSEntityDescription和NSManagedContext: insertIntoManagedContext参数传递给构造函数,Xcode在调用中说"额外参数'实体'"
我从头开始创建一个新的Xcode项目,看看我是否可以在一个较小的,最小的项目中重新创建问题.
ToDoList.Item Item在数据模型检查器中设置为实体类.
这是代码:
override func viewDidLoad() {
super.viewDidLoad()
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)!
//compiler complains here
var item = Item(entity: ent, insertIntoManagedObjectContext: context)!
}
Run Code Online (Sandbox Code Playgroud)
这是子类:
import UIKit
import CoreData
class Item: NSManagedObject {
@NSManaged var title: String
@NSManaged var completed: Bool
}
Run Code Online (Sandbox Code Playgroud)
所有帮助表示赞赏.
我有一个方法我将'id'传递到这里:
NSString *id = @"4bf58dd8d48988d181941735";
[self getNames:id];
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我使用segue中传递的对象的'id'时:
NSString *id = _selectedStore._id;
[self getNames:id];
Run Code Online (Sandbox Code Playgroud)
我收到错误:
'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
这是它得到错误的地方.我的尝试(记住我是新手)是取一个Foursquare id的数组,得到名字,然后得到idUrl的id.如果我删除所有创建photoUrl的代码(我已在代码中注明),它会运行而不会崩溃.
- (void)getNames {
NSMutableArray *final = [[NSMutableArray alloc] init];
for (SearchVenue *object in self.venues) {
[Foursquare2 venueGetDetail:object._id callback:^(BOOL success, id result){
if (success) {
NSDictionary *dic = result;
NSArray *venue = [dic valueForKeyPath:@"response.venue"];
self.venueDetail = venue;
NSMutableDictionary *newVen = [NSMutableDictionary dictionary];
[newVen setValue:[self.venueDetail valueForKey:@"name"] forKey:@"name"];
[final addObject:newVen];
[Foursquare2 venueGetPhotos:object._id limit:nil …Run Code Online (Sandbox Code Playgroud) nsmanagedobject ×10
ios ×8
core-data ×7
objective-c ×5
iphone ×2
xcode ×2
cocoa ×1
nsarray ×1
nsdictionary ×1
restkit ×1
segue ×1
swift ×1