我有一个iPhone应用程序,有不同的皮肤风格,不同的艺术资产和声音,但所有相同的代码.
我已经设置了多个目标,但我遇到的问题是我必须有一组不同的UIBuilder nib文件,每个目标每个视图一个,设置为指向该目标的正确艺术.
这有点令人沮丧,因为如果我对一个nib文件进行更改,我必须在所有其他nib文件中手动进行相同的更改,相同的连接等.我还为不同的皮肤添加了不同名称的所有资源,因此它们不会在项目中发生冲突.所以,如果我有目标,A和B,我有a_main_menu.png,b_main_menu.png... a_FooViewController.xib,b_FooViewController.xib...等等.
有没有办法制作一个nib文件,指向具有相同名称的资产,但是在......嗯,不同的捆绑包?捆绑是什么?我可以想象在我的代码中修复这样的东西(可能在加载它之前搜索和替换N中的B,甚至可能足够好),虽然我没有尝试过,但这很难看.
对于我的第一组应用程序来说,这是一个可管理的策略(尽管远非最佳),但随着我的东西变得越来越复杂,我的构建器文件保持同步变得非常困难,而且这种工作方式并不是很干净.除了放弃uibuilder并在代码中创建我的观点之外,还有更好的方法吗?
如果这在xcode/builder级别工作会很好,所以构建器会尊重我当前的目标,并在我工作的时候展示该目标的艺术......但我可以没有那样生活,就像我可以选择在运行时的当前艺术集,我只能在构建器中使用一组.我也可以通过一个目标并在构建之前手动替换所有艺术品来完成一组笔尖,但这也不是很好.
最重要的是,如果我可以混合使用这两种策略 - 比如我有一个目标,其中有一个具有一个视图,而不是以不同的方式布局......但这是可选的.
我问的是正确的问题吗?
谢谢!
我喜欢Rails的部分原因是我讨厌SQL - 我认为它更像是一种汇编语言,应该使用更高级别的工具(如ActiveRecord)进行操作.然而,我似乎已经达到了这种方法的极限,而且我已经超出了SQL的深度.
我有一个包含大量子记录的复杂模型.我还有一组30-40个named_scopes,它们从客户端实现业务逻辑.这些范围有条件地链接在一起,这就是为什么我有这些joins_范围所以连接不会被破坏.
我有几个不能正常工作,或者至少不是客户希望他们如何工作.这里是模型结构的粗略概念,其中有一些命名范围(不是示例所需的全部范围),用于说明我的方法并指出我的问题. (请原谅任何语法错误)
class Man < ActiveRecord::Base
has_many :wives
named_scope :has_wife_named lambda { |n| { :conditions => { :wives => {:name => n}}}}
named_scope :has_young_wife_named lambda { |n| { :conditions => { :wives => {:name => n, :age => 0..30}}}}
named_scope :has_yw_named_v2 lambda { |n| { :conditions => ["wives.name = ? AND wives.age <= 30", n]}}
named_scope :joins_wives :joins => :wives
named_scope :has_red_cat :conditions => { :cats => {:color => 'red'}}
named_scope :has_cat_of_color lambda { …Run Code Online (Sandbox Code Playgroud) 我拼命想弄清楚Arel,主要是因为我讨厌处理SQL; 我做得很好,但我撞墙了.
我一直在Rails 3.0.0中工作,我正在尝试使用一些数学进行复杂的查询.真实情况相当复杂,但我简化了一下.在我的例子中,我有一个带有特定字符串字段的表,我想要计算所有记录,以及该字段的两个可能值中的每一个的计数,按外部id分组.
在Rails 3.0.0下,我可以这样做(控制台命令):
t = Arel::Table.new(:some_thingies)
e = t .project(t[:foreign_id], t[:foreign_id].count.as('all_count')) .group(t[:foreign_id])
c = t.where(t[:some_field].eq('type1')).project(t[:foreign_id], t[:foreign_id].count.as('type1_count')).group(t[:foreign_id])
x = e
x = x.join(c).on(e[:foreign_id].eq(c[:foreign_id]))
Run Code Online (Sandbox Code Playgroud)
在这一点上,我可以做x.to_sql和...好吧,我不完全确定它是正确的,但结果看起来是正确的,除了两次foreign_id列.
SELECT
`some_thingies_external`.`foreign_id`,
`some_thingies_external`.`all_count`,
`some_thingies_external_2`.`foreign_id`,
`some_thingies_external_2`.`type1_count`
FROM
(SELECT
`some_thingies`.`foreign_id`, COUNT(`some_thingies`.`foreign_id`)
AS `type1+count`
FROM `some_thingies`
GROUP BY `some_thingies`.`foreign_id`) `some_thingies_external`
INNER JOIN
(SELECT `some_thingies`.`foreign_id`, COUNT(`some_thingies`.`foreign_id`)
AS `type1_count`
FROM `some_thingies`
WHERE `some_thingies`.`type` = 'type1'
GROUP BY `some_thingies`.`foreign_id`) `some_thingies_external_2`
ON `some_thingies_external`.`foreign_id` = `some_thingies_external_2`.`foreign_id`
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,当我尝试加入第二组这样的计数时:
i = t.where(t[:some_field].eq('type2')).project(t[:foreign_id], t[:foreign_id].count.as('type2_count')).group(t[:foreign_id])
x = x.join(i).on(e[:foreign_id].eq(i[:foreign_id]))
Run Code Online (Sandbox Code Playgroud)
它只是挂断了,让我觉得我遇到了这个bug
(顺便说一句,我有更多的计数要加入,理想情况下'some_thingies'应该是一个arel对象,代表更多过滤我们正在计算的东西......但我离题了......)
所以,我决定尝试最新的边缘Arel和Rails,并相应地提升我的宝石:
gem 'rails', :git => …Run Code Online (Sandbox Code Playgroud) 这一直困扰着我.这不是一件困难的事情,但我不知道为什么没有简单的方法可以做到这一点,而且我打赌有,而且我没有看到它.
我只想拿一个哈希,像这样:
cars = {:bob => 'Pontiac', :fred => 'Chrysler',
:lisa => 'Cadillac', :mary => 'Jaguar'}
Run Code Online (Sandbox Code Playgroud)
并做一些类似的事情
cars[:bob, :lisa]
Run Code Online (Sandbox Code Playgroud)
得到
{:bob => 'Pontiac', :lisa => 'Cadillac'}
Run Code Online (Sandbox Code Playgroud)
我这样做了,效果很好:
class Hash
def pick(*keys)
Hash[select { |k, v| keys.include?(k) }]
end
end
ruby-1.8.7-p249 :008 > cars.pick(:bob, :lisa)
=> {:bob=>"Pontiac", :lisa=>"Cadillac"}
Run Code Online (Sandbox Code Playgroud)
显然有很多简单的方法可以做到这一点,但我想知道是否有一些内置的东西我错过了,或者一个不明显的原因它不是标准和正常的东西?没有它,我最终会使用类似的东西:
chosen_cars = {:bob => cars[:bob], :lisa => cars[:lisa]}
Run Code Online (Sandbox Code Playgroud)
这不是世界末日,但它不是很漂亮.看起来这应该是常规词汇的一部分.我在这里错过了什么?
(相关问题,包括:Ruby Hash Whitelist Filter)(这篇博文与我的结果完全相同,但同样,为什么不内置这个?http://matthewbass.com/2008/06/26/picking -values-from-ruby-hashes /)
更新:
我正在使用Rails,它有ActiveSupport :: CoreExtensions :: Hash :: Slice,它完全按照我的意愿工作,所以问题解决了,但仍然......也许别人会在这里找到答案:)