我在NSUserDefaults中存储了两种存储NSDate的方法.
// Set
NSDate *myDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"myDateKey"];
// Get
NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myDateKey"];
Run Code Online (Sandbox Code Playgroud)
// Set
NSDate *myDate = [NSDate date];
NSTimeInterval myDateTimeInterval = [myDate timeIntervalSince1970];
[[NSUserDefaults standardUserDefaults] setFloat:myDateTimeInterval forKey:@"myDateKey"];
// Get
NSTimeInterval myDateTimeInterval = [[NSUserDefaults standardUserDefaults] floatForKey:@"myDateKey"];
NSDate *myDate = [NSDate dateWithTimeIntervalSince1970:myDateTimeInterval];
Run Code Online (Sandbox Code Playgroud)
选项1
这似乎是紧凑和合乎逻辑的.但是,由于Date Formatter错误,我担心这会出错.
选项2
这似乎很笨拙.我也不确定它的准确性 - 在我做过的一次测试中,当我检索到日期时它已经超过了48秒,尽管Apple Docs说NSTimeInterval具有"亚秒精度".
无论我选择何种方法,都必须:
精确到一秒钟之内.
可读且可靠.
选项2是不准确的,因为我做错了什么?
你会使用这两个选项中的哪一个?
还有其他选择我不知道吗?
谢谢!
我在rake任务中调试内存泄漏.我想看一个调用堆栈:
红宝石教授可以吗?
如果没有,我应该使用什么工具?
宝石
耙任务
我试过这些模式
它在文档中说的全部是:
RubyProf :: ALLOCATIONS对象分配报告显示程序中每个方法分配的对象数.
RubyProf :: MEMORY内存使用情况报告显示程序中每个方法使用的内存量.
这意味着ruby-prof只报告对象的总分配,而不仅仅是生活对象的分配.
我尝试过Ruby-Mass和Bloat Check,但似乎都没能做到我想要的.Ruby-Mass也崩溃,因为它出于某种原因在内存中找到FactoryGirl对象......
背景
我正在构建一个应用程序,它可以从文件系统中检测您正在使用的文档.为此,它必须访问活动窗口的AXDocument属性.MacVim提供了此功能.在终端中运行Vim不会提供此功能.
我刚刚发布了一项调查,询问对我的应用程序使用感兴趣的编辑程序员.很多使用Vim的人都直接从命令行使用它.
为什么不使用GUI Vim?
为什么有些人喜欢以这种方式运行Vim而不是像MacVim这样的GUI实现?
这提供了什么优势?据我了解,您可以从命令行将文件发送到MacVim,就像命令行Vim一样容易.
问题
我收到错误:
ActionDispatch::RemoteIp::IpSpoofAttackError (IP spoofing attack?!HTTP_CLIENT_IP="203.29.78.157"HTTP_X_FORWARDED_FOR="172.20.19.214, 116.50.58.180"):
当有些人访问我的Rails 3.0.10应用程序并登录或确认他们的电子邮件地址时.我正在使用Devise.
我试过的
所以在production.rb我补充说:
config.action_controller.ip_spoofing_check = false
我也尝试将其添加到environment.rb:
Things3::Application.configure do
config.action_mailer.delivery_method = :smtp
config.action_controller.ip_spoofing_check = false
end
Run Code Online (Sandbox Code Playgroud)
我仍然得到错误.我错过了什么?
问题
我正在编写一个Cocoa应用程序,我想提出异常会使应用程序崩溃.
我的应用程序委托中有以下行:
[NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
abort();
Run Code Online (Sandbox Code Playgroud)
问题是,他们没有关闭应用程序 - 消息只是记录到控制台,应用程序继续它的快乐方式.
据我了解,例外的全部内容是它们在特殊情况下被解雇.在这种情况下,我希望应用程序以明显的方式退出.这不会发生.
我试过的
我试过了:
-(void)applicationDidFinishLaunching:(NSNotification *)note
// ...
[self performSelectorOnMainThread:@selector(crash) withObject:nil waitUntilDone:YES];
}
-(void)crash {
[NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
abort();
}
Run Code Online (Sandbox Code Playgroud)
哪个不起作用
-(void)applicationDidFinishLaunching:(NSNotification *)note
// ...
[self performSelectorInBackground:@selector(crash) withObject:nil];
}
-(void)crash {
[NSException raise:NSInternalInconsistencyException format:@"This should crash the application."];
abort();
}
Run Code Online (Sandbox Code Playgroud)
相当令人困惑的是,它按预期工作.
这是怎么回事?我究竟做错了什么?
我有以下对象树:
Name Project
Users nil
John nil
Documents nil
Acme Project Acme Project <--- User selects a project
Proposal.doc Acme Project
12:32-12:33 Acme Project
13:11-13:33 Acme Project
...thousands more entries here...
Run Code Online (Sandbox Code Playgroud)
用户可以将组分配给项目.所有后代都设置为该项目.
这会锁定主线程,所以我正在使用NSOperations.
我正在使用Apple批准的方式来执行此操作,观察NSManagedObjectContextDidSaveNotification并合并到主要环境中.
我的保存失败,出现以下错误:
Failed to process pending changes before save. The context is still dirty after 100 attempts. Typically this recursive dirtying is caused by a bad validation method, -willSave, or notification handler.
我已经剥离了我的应用程序的所有复杂性,并做了我能想到的最简单的项目.并且错误仍然存在.我试过了:
将队列上的最大操作数设置为1或10.
refreshObject:mergeChanges:在NSOperation子类中的几个点调用.
在托管对象上下文中设置合并策略.
建立和分析.它空洞了.
如何在没有我的应用程序崩溃的情况下在NSOperation中设置关系?当然这不能限制核心数据?它可以?
下载我的项目: …
我的问题
我在编译一些Xcode项目时遇到了"_OBJC_CLASS _ $ ...,引用自:"链接器错误(它发生在iOS和Mac项目中)我已正确链接框架和导入.
建立
在编译时,我得到以下链接器错误:"_ OBJC_CLASS _ $ _ JGCountdownTimer",引自:JGCountdownTimerTestCase.o中的objc-class-ref
对于测试中使用的许多类.
我试过的
我正在编写各种例程,我正在尽力保持整洁和重构.
我正在创建的方法开始看起来与此代码类似:
-(IBAction)buttonPress:(id)sender {
// Create Document Shopping List with this document
[self doSomething:&error];
if(error) {
[NSApp presentError:&error];
return nil;
}
[self doSomethingElse:&error];
if(error) {
[NSApp presentError:&error];
return nil;
}
[self doYetSomethingElse:&error];
if(error) {
[NSApp presentError:&error];
return nil;
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢NSError,但这似乎是处理我所有错误的非常笨拙的方式.
我对替代方法的一些想法:
a)错误检查可以内置到doSomething,doSomethingElse等方法中,但是如果不对返回值进行某种检查,我将无法退出按钮按下方法,这会导致我回到类似的结构.
b)我可以将NSError设置为观察到的键值,但是关于这一点的东西感觉非常错误.我非常清楚KVO滥用的可能性,所以我试图在没有它的情况下做任何事情.
当然我错过了一些非常基本的东西吗?有没有一种模式可以帮助我?或者这个结构好吗?
背景
我已经发布了一个关于在进程之间共享Core Data存储的基础知识的问题.
我正在尝试实施给出的建议,但我遇到了问题.
我的目标
我有两个过程 - 帮助应用程序和UI.它们共享一个数据存储.当Helper App将新数据保存到商店时,我希望UI更新它的NSManagedObjectContext.
当前的计划流程
Helper App Process将数据写入Store.
在Helper App中,我监听NSManagedObjectContextDidSaveNotification通知.
保存上下文后,我使用它们的URI表示和NSArchiver对插入,删除和更新的对象进行编码.
我将NSNotification发送到NSDistributedNotificationCenter,并将此编码字典作为userInfo发送.
UI进程正在侦听保存通知.收到通知后,它会使用NSUnarchiver取消归档userInfo.
它从给定的URI中查找所有更新/插入/删除的对象,并用NSManagedObjects替换它们.
它使用更新/插入/删除的对象构造NSNotification.
我在UI进程的托管对象上下文中调用mergeChangesFromContextDidSaveNotification:传入我在上一步中构建的NSNotification.
问题
插入的对象出现在UI管理对象上下文中,并且它们出现在UI中.问题来自更新的对象.他们只是不更新.
我试过的
最明显的尝试是将Helper App流程中的保存通知传递给UI流程.容易,对吗?好吧,不.分布式通知将不允许我这样做,因为userInfo字典的格式不正确.这就是我正在做所有NSArchiving的原因.
我已经尝试调用要更新的NSManagedObjects上的refreshObject:mergeChanges:YES,但这似乎没有任何效果.
我已经尝试在主线程和当前线程上执行mergeChangesFromContextDidSaveNotification:selector.似乎都没有影响结果.
我尝试过使用mergeChangesFromContextDidSaveNotification:在线程之间,这当然要简单得多,而且效果很好.但我需要在进程之间使用相同的功能.
备择方案?
我在这里错过了什么吗?我一直觉得我做的比现在要复杂得多,但是经过多次阅读文档并花了几天时间,我看不出任何其他方式来刷新MOC用户界面.
有更优雅的方式吗?或者我只是在我的代码中某处犯了一个愚蠢的错误?
代码
我试图尽可能让它变得可读,但它仍然是一团糟.抱歉.
帮助应用程序代码
-(void)workerThreadObjectContextDidSave:(NSNotification *)saveNotification {
NSMutableDictionary *savedObjectsEncodedURIs = [NSMutableDictionary dictionary];
NSArray *savedObjectKeys = [[saveNotification userInfo] allKeys];
for(NSString *thisSavedObjectKey in savedObjectKeys) {
// This is the set of updated/inserted/deleted NSManagedObjects.
NSSet *thisSavedObjectSet = [[saveNotification userInfo] objectForKey:thisSavedObjectKey];
NSMutableSet *thisSavedObjectSetEncoded = [NSMutableSet set];
for(id thisSavedObject in [thisSavedObjectSet allObjects]) …Run Code Online (Sandbox Code Playgroud) 的背景
NSMigratePersistentStoresAutomaticallyOption
密钥传入字典来启用迁移
[NSNumber
numberWithBool:YES].modelByMergingModels: 问题
无论我做什么迁移,我都会收到错误消息:
"持久存储迁移失败,缺少源管理对象模型."
我试过的
我的智慧结束了.
我不禁想到我在某个地方犯了一个很大的错误,我没有看到.有任何想法吗?