更新:我最终放弃并将GHUnit添加到我的项目中.我在几分钟内就开始使用GHUnit.
更新:您可以在此处下载Xcode项目:http://github.com/d11wtq/Cioccolata
我已经为我的Xcode项目添加了一个单元测试目标,但它在构建时找不到我的框架,说:
Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
我的框架(主项目目标)旨在嵌入,因此具有安装路径@executable_path/../Frameworks.
我已将框架标记为测试目标的直接依赖关系,并将其添加到"Link Binary with Libraries"构建阶段.
另外,我添加了"复制文件"的第一步(在它构建了依赖项之后),它只是将框架复制到单元测试包的Frameworks目录中.
有人有这方面的经验吗?我不确定我错过了什么.
编辑| 我很确定我不应该,因为框架不可执行,但我没有设置"测试主机"和"捆绑加载器".这应该(据我的理解)一切正常,因为测试包与框架链接并将像任何其他包一样加载它.
编辑| 我想我差不多了.我阅读了以下文章,该文章规定使用@rpath而不是@executable_path.
http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
在这种情况下,它非常有意义,因为OCUnit测试包不是可执行文件,它是一个普通的旧包,所以@executable_path不兼容.所以现在我的框架将其安装目录设置为@rpath,并且Test目标将其运行时搜索路径(rpath)定义为构建目录.这节省了我不得不将框架复制到测试包中,这意味着整个生成的框架本质上更灵活,因为它可以在任何地方生活.
现在,我也意识到我应该在Test目标上设置Bundle Loader,所以现在将其设置为框架二进制文件的路径.
我可以构建测试目标,我可以从框架中#import类,没有错误.但是一旦我尝试从框架中实例化一个类,我就会收到以下错误:
/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386'
/Developer/Tools/RunPlatformUnitTests.include:419: …
如果我对阴暗图像的确切色调等不是很挑剔,是否有一种快速而肮脏的方式来绘制一个稍微暗淡的NSImage,就像这样?我在网上搜索过,无法真正找到我想要的东西(但在理解图形和正确的技术术语方面我不是很好).

我实际上调整了与上面的Xcode调光图标相同的用例的图标(即文档有未保存的更改).
我的应用程序允许用户重命名当前打开的文档.这是微不足道的,并且工作正常,有一个我无法弄清楚的非常烦人的错误.重命名文件时,AppKit(善意)会在下次尝试保存文档时向用户发出警告.用户说"OK",一切都正常.当应用程序外部的某些内容更改了文档时,这是有道理的,而不是在文档本身实际完成时.
代码如下:
-(void)renameDocumentTo:(NSString *)newName {
NSURL *newURL = [[[self fileURL] URLByDeletingLastPathComponent]
URLByAppendingPathComponent:newName];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager moveItemAtURL:[self fileURL] toURL:newURL];
NSDictionary *attrs = [fileManager attributesForItemAtPath:[newURL path] error:NULL];
[self setFileURL:newURL];
[self setFileModificationDate:[attrs fileModificationDate]];
}
Run Code Online (Sandbox Code Playgroud)
有人会认为在文档上明确设置新的URL和修改日期就足够了,但遗憾的是它不是.Cocoa仍会生成警告.
我已经尝试更改顺序(在文档上设置新URL,然后重命名文件),但这没有帮助.
我也尝试过用户在CocoaDev的旧帖子上建议修复:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
Run Code Online (Sandbox Code Playgroud)
即使这样也不会停止警告,我猜测必须有一个正确的方法来使用记录的API来做到这一点.当用户单击项目树上的文件并将其重命名为其他内容时,Xcode如何处理事物.它不会警告用户重命名,因为用户实际执行了重命名.
如果有人能够对我可能需要做的事情有所了解,那就太棒了,谢谢!
是否有可能使这项工作成为可能,而不必在课程结束时包含该模块并将其包含在顶部?
module VerboseJob
def self.included(job_class)
class << job_class
alias_method :original_perform, :perform
def perform(*args)
JobLogger.verbose { original_perform(*args) }
end
end
end
end
class HelloJob
include VerboseJob
def self.perform(arg1, arg2)
puts "Job invoked with #{arg1} and #{arg2}"
end
end
Run Code Online (Sandbox Code Playgroud)
我想要发生的是HelloJob.perform实际调用VerboseJob.perform(然后调用块内的原始方法).因为此处的模块包含在类的顶部,所以这不起作用,因为perform尚未定义.移动include到最后确实有效,但是有一种方式更宽容吗?我喜欢将所有包含的模块保留在我的类定义的顶部.
我正在寻找一些被调用的方法Module或者Class它已经完全加载的方法,而不是运行时解释的方法.
<%# Flash-based notifications %>
<% if flash[:error].present? or flash[:notice].present? %>
<div class="messages <%= flash[:error] ? 'error' : 'notice' %>">
<ul id="feedback">
<% if flash[:error].present? %>
<li><%= flash[:error] %></li>
<% end %>
<% if flash[:notice].present? %>
<li><%= flash[:notice] %></li>
<% end %>
</ul>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,尽管看起来很简单,但我尝试从局部内部的闪存中读取产生此错误,因为闪存设置为nil.我需要手动初始化它还是什么?
这是Rails 3.1.0.该错误位于代码段的第2行,它尝试访问该代码段flash[:error].
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
Run Code Online (Sandbox Code Playgroud)
我肯定错过了什么.我绝对不会在任何地方压倒它.
我正在玩诡计,试图熟悉纯函数式编程概念.在我可以用任何语言做任何有用的事情之前,我需要了解一些基本的数据结构以及如何有效地操作它们......特别是可枚举的数据结构.
我可以迭代这样的列表(我不确定我是否正确缩进):
(map (lambda (v)
(display (string-append v "\n"))
'(1 2 3))
=>
1
2
3
Run Code Online (Sandbox Code Playgroud)
散列表/哈希映射在scheme中是什么样的?是否有真正的数据结构来表示一个,或者它是否归结为列表列表?在这种情况下,如何将键和值作为单独的变量从内部列表中获取?
显然这是错误的,因为lambda期望一个值,而不是两个:
(map (lambda (key value)
(display (string-append key " => " value))
'('("one" 1) '("two" 2) '("three" 3)))
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的Ruby相当于:
{ "one" => 1, "two" => 2, "three" => 3 }.map do |key, value|
puts "#{key} => #{value}"
end
Run Code Online (Sandbox Code Playgroud) 在LALR(1)解析器中,语法中的规则被转换为一个解析表,有效地说"如果到目前为止你有这个输入,并且前瞻标记是X,那么转移到状态Y,或者通过规则R减少" .
我已成功构建了一个解释语言(ruby)的LALR(1)解析器,不使用生成器,而是在运行时计算解析表并使用该解析表评估输入.这种方法效果非常好,表格生成非常简单(让我感到有些惊讶),支持自我引用规则和左/右关联.
然而,我有一点难以理解的是,yacc/bison在概念上如何处理空规则定义.我的解析器无法处理它们,因为在生成表时它会递归地查看每个规则中的每个符号,而"空"不是来自词法分析器的东西,也不会被规则缩小.那么,LALR(1)解析器如何处理空规则呢?他们是专门对待它,还是一个有效算法应该使用的"自然"概念,甚至不需要特别了解这样的概念?
比方说,一个规则可以匹配任意数量的配对括号,中间没有任何内容:
expr: /* empty */
| '(' expr ')'
;
Run Code Online (Sandbox Code Playgroud)
像下面这样的输入符合此规则:
((((()))))
Run Code Online (Sandbox Code Playgroud)
这意味着在前瞻标记中读取'('和see')'时,解析器选择:
不太适合"转移"或"减少"的核心算法.解析器实际上需要不将任何内容转移到堆栈上,减少"无" expr,然后移动下一个令牌')',给予'(' expr ')',当然减少到expr,等等.
这让我感到困惑的是"没有任何转变".解析表如何传达这样一个概念?还要考虑应该可以调用一些语义操作来返回一个值来$$减少空值,所以一个相当简单的视图,只是从解析表中跳过它并说'('在堆栈和')'前瞻中应该简单地转换为一个班次,不会真正产生序列'(' expr ')',但只会产生序列'(' ')'.
我正在写一个包含C扩展的gem.通常当我写一个gem时,我会遵循TDD的过程,在那里我将编写一个失败的规范,然后处理代码直到它通过等等......
使用我在"ext/mygem/mygem.c"中的C扩展和在gemspec的"扩展"中配置的有效extconf.rb,如何运行我的规范并仍然加载了我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?
这可能是一个愚蠢的问题,但是从我的gem的开发源代码树里面输入'bundle install'并没有构建任何原生扩展.当我手动运行时,ruby ext/mygem/extconf.rb我得到一个Makefile(在整个项目的根目录中),当我运行时make,我确实得到了一个共享对象(同样,在整个项目的根目录中).我必须遵循错误的工作流程,因为我知道.so应该放在lib /下.除非我只是想在开发过程中手工做到这一点?
我想在这里变得聪明。假设我编写了一个包装其他类的实例的类,覆盖一两个方法,但将所有其他方法调用直接传递给委托对象。
function Wrapper(delegate) {
this._delegate = delegate;
}
Wrapper.prototype.example = function() {
console.log('Doing something in wrapper');
this._delegate.example();
};
Run Code Online (Sandbox Code Playgroud)
如果委托有 100 个其他方法(夸张,授予),远没有在我的 Wrapper 中为每个方法定义一个方法,那么在 JavaScript 中是否有一种优雅的方法来做到这一点?
我只考虑过实际实例上的方法调配/代理,即
Wrapper.wrap = function(delegate) {
var example = delegate.example;
delegate.example = function() {
example.call(this, arguments);
console.log('Forwarded an overridden method call!');
};
return delegate;
};
Run Code Online (Sandbox Code Playgroud)
但是如果可以避免的话,我宁愿不修改实例。
我正在使用Emacs Lisp,但是已经cl加载了包,用于一些常见的lisp功能.
我有一个包含多达50K条目的哈希表,整数键映射到三元组,类似这样(但在实际的lisp中):
{
8 => '(9 300 12)
27 => '(5 125 9)
100 => '(10 242 14)
}
Run Code Online (Sandbox Code Playgroud)
三元组中的第二个值是在构建散列表的复杂算法期间计算的分数.我需要收集一个常规的lisp列表,其中包含哈希中的所有键,按得分排序(即由值的cadr排序的所有键).
所以对于上面的内容,我需要这个列表:
'(27 100 8)
Run Code Online (Sandbox Code Playgroud)
我目前正在做两个阶段,感觉效率低于它需要的阶段.
有没有办法做到这一点?
我当前的解决方案用于maphash将密钥和值收集到两个新列表中,然后sort以正常方式执行,参考谓词中的分数列表.但是,我觉得我可以将收集和排序结合起来.
编辑| 我也不依赖于使用哈希表,尽管我确实需要对整数键的持续访问时间,这些键不是线性间隔的.
编辑2 | 看起来实现二叉树排序可能会起作用,树中的标签是分数,值是键......这样我就可以在哈希映射时进行排序.
...继续阅读有关排序算法的维基百科页面
cocoa ×3
objective-c ×3
macos ×2
ruby ×2
dictionary ×1
elisp ×1
emacs ×1
extconf.rb ×1
gh-unit ×1
guile ×1
javascript ×1
lalr ×1
lisp ×1
module ×1
node.js ×1
nsdocument ×1
nsimage ×1
ocunit ×1
parsing ×1
rubygems ×1
scheme ×1
wrapper ×1
xcode ×1
yacc ×1