我正在创建一个应支持离线模式的任务应用程序。我使用 RestKit 下载任务并将其映射到本地核心数据中。
这在在线模式下运行良好。但是离线有奇怪的问题。我使用 NSPredicate 从本地存储中获取数据。为此,我正在使用 Magical Records。
+ (void)getIdeasTasksWithPageNo:(int)pageNo completionHandler:(void (^)(NSArray *, NSError *))completionHandler {
NSArray *tasks = [self MR_findAllWithPredicate:[NSPredicate predicateWithFormat:@"due_date = nil AND user_id = %@", [DBUsers currentUser].id]];
completionHandler(tasks, nil);
}
我这样调用它:
[DBTasks getIdeasTasksWithPageNo:1 completionHandler:^(NSArray *tasks, NSError *error) {
if (!error) {
[self displayTasksWithResults:tasks forPageNo:1];
} else {
NSLog(@"Error is %@", error);
}
}];
这就是我在 UITableView 中显示它的方式
-(void)displayTasksWithResults:(NSArray *)tasks forPageNo:(int)pageNo {
if (!self.tasksArray) {
self.tasksArray = [[NSMutableArray alloc] init];
} else {
[self.tasksArray removeAllObjects];
}
[self.tasksArray addObjectsFromArray:tasks];
[self.tableview reloadData];
}
这只是第一次工作,所有任务都填充在 UITableView 中。
问题是在 UITableView 被填充后,self.tasksArray 中的所有记录都变成了 Null。如果我滚动 UITableView,表格行开始为空。
但是如果我在 displayTasksWithResults 方法中打印 self.tasksArray,它会完美打印。
(
"Title: Task 01",
"Title: You've gone incognito. Pages you view in incognito tabs won't stick around in your browser's history, cookie store, or search history after you've closed all of your incognito tabs. Any files you download or bookmarks you create will be kept. ",
"Title: Task 06",
"Title: Task 04",
"Title: Hi",
"Title: Task 3",
"Title: Task 4",
"Title: Hi 4",
"Title: hh",
"Title: Task 02",
"Title: Task 05\n",
"Title: Task 4",
"Title: Task 5",
"Title: Task 2 updated",
"Title: Here is a task. ",
"Title: Task 03",
"Title: Hi 3",
"Title: Task 2",
"Title: Hi 2",
"Title: Testing task email with Idea Task",
"Title: Task f6",
"Title: 1.117",
"Title: Task f5",
"Title: Task f12",
"Title: Task f4",
"Title: Task f3",
"Title: 111.0.113",
"Title: 111.0.115",
"Title: Pages you view in incognito tabs won't stick around in your browser's history, cookie store, or search history after you've closed all of your incognito tabs. Any files you download or bookmarks you create will be kept.",
"Title: Task f7",
"Title: 1.116",
"Title: 1.118",
"Title: Going incognito doesn't hide your browsing from your employer, your internet service provider, or the websites you visit. ",
"Title: 111.0.111"
)
如果我稍后打印 self.taskArray,可能在 UITableView 的 didSelectRow 委托(delegate)中,它打印如下:
(
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)",
"Title: (null)"
)
我认为这可能与 NSManagedObjectContext 相关,但不知道如何解决。
请帮忙!
最佳答案
问题是(正如我在评论中所写)对象是在后台线程上获取的,但在主 (UI) 线程上使用。托管对象只能“存在”于
它们是在中创建的。如果上下文被释放,对象仍然存在,但是
属性访问器方法仅返回 nil。
可能的解决方案:
使用
NSManagedObject *copy = [[mainContext objectWithID:[object objectID]];
将对象从后台上下文“复制”到主上下文。 (也许是 MagicalRecord 有一个方便的方法。)
不是获取托管对象,而是设置
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:@[@"title", ...]];
获取包含您感兴趣的属性的字典数组。
关于ios - 核心数据对象变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23357195/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳