我的Ruby on Rails应用程序中有许多控制器,在操作结束时有一个救援处理程序,基本上可以捕获任何未处理的错误并返回某种"用户友好"错误.但是,当我进行rake测试时,我希望禁用那些默认的救援处理程序,这样我就可以看到完整的错误和堆栈跟踪.有没有自动化的方法来做到这一点?
更新澄清:我有这样的行动:
def foo
# do some stuff...
rescue
render :text => "Exception: #{$!}" # this could be any kind of custom render
end
Run Code Online (Sandbox Code Playgroud)
现在,当我对此进行功能测试时,如果异常被提出,那么我将获得关于异常的一些信息,但我想要的是它的行为好像那里没有救援处理程序,所以我获取完整的调试信息.
更新:解决方案
我这样做了:
rescue:
raise unless Rails.env.production?
render :text => "Exception: #{$!}" # this could be any kind of custom render
end
Run Code Online (Sandbox Code Playgroud) 查看Apple iPhone Core Data Recipes示例应用程序,它们将图像文件存储在核心数据对象中,这通常不是我认为明智的.现在我也将在3GS上捕捉视频故事.问题是:在iPhone上的Core Data中存储图像,然后是电影是否明智?
此外,还有加载到内存中.显然,食谱中使用的设计(即,将图像存储在单独的模型中)允许Core Data执行"断层运算"(听起来它意味着延迟加载),但我不确定这是否真的如此.
看这里:http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdPerformance.html#//apple_ref/doc/uid/TP40003468-SW5似乎通用的Cocoa建议是使用单独的文件....
我的应用程序昨天被批准用于App Store,从那时起我们收到了许多关于崩溃的报告,这些报告没有出现在开发版本中.但是,当我进入iTunes Connect>管理您的应用程序>(应用程序)>当前版本>查看详细信息>崩溃报告时,我收到以下消息:Too few reports have been submitted for a report to be shown.在每个选项卡下进行刷新后都是如此.
鉴于我收到的电子邮件数量,应该有大量的崩溃日志.我错过了什么?
我正在Cocoa Touch API上实现一个可选的委托方法.我想这样做的是,首先调用该方法会,如果我没有实现委托被称为......然后更改结果......然后回到我的修改版本.
这是一个例子:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; {
/* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section];
[headerView setBackgroundColor:[UIColor redColor]];
return headerView;
}
Run Code Online (Sandbox Code Playgroud)
标记的行不起作用.我可以把someObject = tableView.delegate,但这只是给我无限递归.有没有一些技巧可以让tableView做任何事情,如果没有实现可选方法呢?我不是很有希望,但如果可能的话会很酷.
我正在写一个涉及回放正弦波和正弦波组合的程序......它必须在Mac上运行,我正在寻找一个我可以使用的简单 API.我对ObjC,C,C++,Ruby,Python等开放....我不关心什么语言,只要它只是几行代码.但Ruby会很好:-)
在Linux上,您可以写入/ dev/dsp,/ dev/sound等,但不能写入mac.我知道如何生成正弦波,但问题是将我创建的PCM样本传送到音频硬件.我知道/ Developer/Examples/CoreAudio/SimpleSDK/DefaultOutputUnit中的示例代码,但它有数百行荒谬的Core Audio/AudioUnit代码,我想要一些简单易用的东西.
我有一个C++类,我在我的iPhone应用程序中使用我的Objective-C++控制器.C++类对某些数据进行一些计算,返回结果,然后完成 - 但它会像疯了一样泄漏.我想知道我是否能够以某种方式利用Memory Zones(又名malloc区域又名allocWithZone)来解决这个问题.我的想法是将ObjC++对象分配到一个新区域,然后以某种方式让C++对象全部在这个新区域中自动创建.然后,当它返回时,我杀死该区域,并且所有内存将自动恢复,即使它已被泄露.
但是:文档似乎表明我是否在新区域X中分配了一个对象,它分配的对象也不会自动也在区域X中.如果这有意义,是否有人知道如何覆盖该行为以便所有后续的分配和该对象的mallocs将在新区X中?
编辑:
我应该注意,该线程将主要运行C++代码,一个庞大的代码库,并且此时杀死它中的所有泄漏并不经济,因为它自动从Java转换而且像疯了一样泄漏(重构)需要...).感谢"只是修复你的漏洞"的建议,但目前这并不实用.
内存不会通过ObjC分配泄露,但主要是通过C++数组新调用(也有几个直接的malloc).如果这有所作为.
如果我分离NSThread将Cocoa运行在一个单独的内存堆或内存区域?例如,如果我要分离一个线程,使用malloc创建一个大缓冲区,然后让线程退出,我会在某种自动线程清理中恢复该内存,还是会被泄露?
如果我使用POSIX线程(pthread)呢?
请注意,我对ObjC allocs或autorelease pool不感兴趣,我说的是低级缓冲区,例如int*foo = malloc(100000);
我想在ruby中做这样的事情:
safe_variable = begin
potentially_nil_variable.foo
rescue
some_other_safe_value
end
Run Code Online (Sandbox Code Playgroud)
...并将异常块(开始/救援/结束)视为函数/块.这不起作用,但有没有办法得到类似的结果?
请注意,我实际上在做的是这个,但是IMO很丑陋:
begin
safe_variable = potentially_nil_variable.foo
rescue
safe_variable = some_other_safe_value
end
Run Code Online (Sandbox Code Playgroud)
UPDATE
我想我在ruby语法上遇到了一个问题.我实际上在做的是:
object_safe = begin potentially_nil_variable.foo
rescue ""
end
Run Code Online (Sandbox Code Playgroud)
错误是class or module required for rescue clause.可能它认为""应该是异常结果的占位符.
iphone ×4
cocoa ×3
exception ×2
ruby ×2
audio ×1
core-audio ×1
core-data ×1
ios ×1
macos ×1
malloc ×1
memory-leaks ×1
nsthread ×1
objective-c ×1
pthreads ×1
rescue ×1
unit-testing ×1