小编Bil*_*ill的帖子

"复制"非案例类?

当我设计不可变对象时,由于自动生成的copy方法,案例类非常方便.

但是案例类有它们自己的问题:它们不应该继承而且即使你不想要它们也会给你一个提取器.

所以有时我必须使用花园种类的Scala类.问题是,我必须编写自己的不可变API,这可能非常重复:

class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
  def withNewPrincipalBalance(bal: Double) = new Debt(bal, name, endDate)
}
Run Code Online (Sandbox Code Playgroud)

是否有更可扩展的方法来做到这一点?我可以使用编译器插件吗?

scala

21
推荐指数
1
解决办法
5680
查看次数

Facebook iOS SDK是否要求用户在每次使用应用程序时进行身份验证?

正如facebook-ios-sdk的自述文件中所述,我的应用程序在执行任何API调用之前调用Facebook#authorize:delegate:

此方法要求用户进行身份验证(在Facebook应用程序或Safari中),然后将控制权交还给我的iPhone应用程序.问题是它每次调用方法时都要求用户进行身份验证.如果他们已经授予我的应用程序权限,他们会收到一条消息,说该应用程序已经获得授权,他们必须按Okay才能返回我的应用程序.它看起来不太专业.

所以我有两个问题:

  1. 用户是否总是必须重新授权才能拨打Facebook电话?我一直以为它会将访问令牌保存在某处,也许是在用户默认值中,这样您就不需要重新授权了.

  2. 如果用户不必每次都重新授权,有没有办法检查我的应用程序是否已经拥有权限,那么用户不必看到该消息并按下确定?

facebook ios facebook-ios-sdk

19
推荐指数
2
解决办法
1万
查看次数

Scala的Heroku式服务?

我喜欢Heroku,但我更喜欢用Scala而不是Ruby on Rails开发.

有没有人知道像Heroku一样使用Scala的服务?

更新:Heroku现在正式支持Scala - 请参阅下面的链接获取答案

scala heroku

19
推荐指数
2
解决办法
2920
查看次数

解析Objective-C代码进行静态分析

我喜欢静态分析和编译时检查,几乎是出错,但我今天的大部分工作都是在Objective-C中.为了解决这种紧张局势,我希望能够编写自己的分析工具,我可以在Objective-C项目上运行.

但是在互联网上搜索网络表明,人们很难将完整的Objective-C语法整合在一起.一个网站 基本上建议放弃.

我确实在ANTLR网站上找到了一个语法,但是当我把它解雇时,我根本无法解析它.例如,它回应了该行:

void x();
Run Code Online (Sandbox Code Playgroud)

src/main/resources/somecode.m line 1:0 no viable alternative at input 'void'

:(

我仔细研究了语法,发现以下令人沮丧的免责声明:

it's a work in progress, most of the .h file can be parsed
Run Code Online (Sandbox Code Playgroud)

但是我需要能够解析接口和实现的东西.

某处有完整的Objective-C 2.0语法吗?我更喜欢可以与Scala一起使用的东西(所以任何与Java兼容的东西,比如ANTLR,都是完美的),但是在这一点上,我愿意为另一个解析器工具包设计一些东西.

parsing antlr static-analysis objective-c javacc

19
推荐指数
2
解决办法
4343
查看次数

关于测试驱动开发的Philisophical问题

我一直对测试驱动的开发感兴趣,但是当我在实际项目上尝试它时,我永远无法完成它.我尝试时会不断出现一些哲学问题:

  1. 你如何处理大的变化?在测试单个函数(一些参数,结果值,几个副作用)时,TDD是一个明智的选择.但是当你需要彻底检修大型的东西时,例如从SAX解析库切换到DOM解析库呢?当代码处于中间状态时,如何保持测试代码重构周期?一旦你开始进行更改,你将获得一系列失败的测试,直到你完成大修(除非你保持某种类型的mongrel类同时使用DOM和SAX,直到你完成转换,但这很奇怪) .在这种情况下,小步测试代码重构循环会发生什么?在整个过程中,您将不再进行小型,经过全面测试的步骤.人们必须以某种方式处理这个问题.
  2. 使用模拟测试GUI或数据库代码时,您真正在测试什么?模拟是为了准确地返回您想要的答案而构建的,那么您如何知道您的代码将与真实数据库一起使用?自动化测试对这类事情有什么好处?它在某种程度上提高了信心,但是a)它没有给你完全单元测试应该具有的相同水平的信心,并且b)在某种程度上,你不是简单地验证你的假设是否适用于你的代码而不是您的代码是使用DB还是GUI?

有人能指出我在大型项目中使用测试驱动开发的良好案例研究吗?令人沮丧的是,我基本上只能找到单个类的TDD示例.

谢谢!

testing tdd unit-testing

18
推荐指数
1
解决办法
1237
查看次数

在Emacs中,如何在当前文件中的函数之间跳转?

我想快速移动指向我的Emacs缓冲区中的函数.我想运行一些函数并得到一个提示,询问我函数名称,并为当前缓冲区中定义的每个函数提供完成.

我通常使用etags来导航,但有时候我正在寻找一个在几个文件中被覆盖的框架方法.在这些情况下,我可以找到我需要的文件但是我想快速跳转到那里的功能.TextMate中有一个类似的功能,您可以从编辑器右下角的列表中选择一个定义.

emacs

18
推荐指数
1
解决办法
1万
查看次数

如何检查Xcode 4中的汇编?

我正在调整一些在我的iPhone应用程序中以紧密循环运行的代码,我很想看到生成的汇编代码,看看是否有任何异常.

在Xcode 3.x中,菜单中有一个Build> Show Assembly Code选项,但是在Xcode 4的菜单或文档中没有看到任何内容.

有人知道怎么做吗?我可以做"gcc -S",但我的理解是,这与整个项目的编译方式不同.

assembly xcode gcc objective-c xcode4

18
推荐指数
3
解决办法
1万
查看次数

iPhone应用程序因iCloud数据存储指南而被拒绝

由于涉嫌违反iCloud数据存储指南,最近拒绝了对我的某个应用程序的严重错误修正更新.

以下是我的应用程序存储数据的方式(自我的应用程序的第一个版本在2009年获得批准以来一直没有问题):

  1. 在启动时,它将"启动"SQLite3数据库从应用程序包复制到Documents文件夹.
  2. 该数据库包含基本架构和一些示例数据,因此用户可以看到如何使用该应用程序.它很小 - 不到3MB.
  3. 然后,用户的未来工作仅保存在此数据库文件中.他们可能删除或保留样本,他们可能会添加大量自己的数据,但该数据库文件将始终存在.

由于同样的原因,今年早些时候的更新被拒绝,但是当我向他们提供上述解释时,应用程序状态从"已拒绝"更改为"在审核中"更改为"处理App Store".他们没有给我任何解释,所以我认为这只是对评论员的误解.

这一次,审阅者回答了我的解释,只是说非用户生成的数据不应该存储在iCloud中,而且我的更新仍处于"已拒绝"状态.

但我不明白我应该在这做什么.因为所有用户的工作都保存在数据库中,所以我不能选择将其从iCloud备份中排除或将其存储在Cache文件夹中.此外,我不能真正干净地将"用户生成的"与"非用户生成的"数据分开,因为该应用程序使用相同的数据库文件.尽管数据库的文件名和目录位置保持不变,但最初的非用户生成的数据将很快被用户自己的数据替换.

即使数据库中没有样本数据,任何数据库支持的应用程序在启动时仍然必须生成一个空数据库 - 即使它所拥有的唯一内容是应用程序的数据库模式.

这一定是一个非常常见的问题,但遗憾的是,我不能仅仅关闭备份 - 用户将大量工作投入到我们应用中存储的数据中,而iCloud备份对他们来说非常重要.

我现在有什么选择?这是我能看到的:

  1. 再次联系Apple并尝试解释发生了什么.

  2. 我可以将文件的备份属性设置为NO,然后仅在用户进行第一次更改时将其切换为YES吗?Apple在技术上是否可以,还可以吗?

  3. 从数据库中删除我的示例数据.这对于可用性来说真的很糟糕,并且会增加我的支持负担,但是如果能够获得我的更新批准,我愿意这样做.但是,我仍然需要在启动时创建一个存根数据库来保存空数据库模式,所以我不确定这是否会在批准过程中产生影响.

  4. 哭.

有人有什么建议吗?我不得不想象有很多其他应用程序使用数据库的方式与我的相同,但是没有选择只禁用备份.

令我非常沮丧的是,我所做的任何更改都需要进行另一轮测试和应用程序审核,这将使我的关键更新再次延迟2-3周.:/

更新:可能还有另一种选择:我可以简单地保存文件Library/而不是Documents/,因为他们的问题似乎特别是使用Documents文件夹?如果文件存储在文件中,它是否会被备份Library/

更新2:我发现最令人困惑的是,任何数据库支持的应用程序(即使它使用Core Data,我认为)都必须创建一个至少包含应用程序架构的数据库文件.问题只是我的数据库的大小太大了吗?因为我无法看到任何数据库支持的应用程序如何避免在启动时创建数据库.

更新3:我正在使用自定义SQLite交互层 - 而不是核心数据.此外,示例数据由初始图像组成,用户在开始使用应用程序时可能会最终删除.

iphone app-store ios

18
推荐指数
1
解决办法
6255
查看次数

如何添加-Swift.h头中使用的前向类引用?

我正在将Swift代码集成到一个大型的Objective-C项目中,但是当我的Swift代码引用Objective-C类时,我遇到了问题.例如,假设我有:

  1. 一个叫做Objective-C的类 MyTableViewController
  2. 一个叫做Objective-C的类 DeletionWorkflow

我声明了一个Swift类如下:

class DeletionVC: MyTableViewController {
  let deleteWorkflow: DeletionWorkflow

  ...
}
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试通过导入ProjectName-Swift.hObjective-C代码来使用这个类,我会得到两个MyTableViewController和未定义的符号错误DeletionWorkflow.

我可以通过导入DeletionWorkflow.h和导入MyTableViewController.h之前修复单个源文件中的问题,ProjectName-Swift.h但这不能扩展到我希望我的Swift和Objective-C经常进行交互的大型项目.

有没有办法添加前向类引用,ProjectName-Swift.h以便当我尝试在我的应用程序中使用Objective-C代码中的Swift类时不会发生这些错误?

objective-c swift

18
推荐指数
2
解决办法
8463
查看次数

如何在Swift中从CGImage创建UIImage?

我正在尝试UIImage从该ALAssetsGroup#posterImage方法创建一个.在Objective-C中,我可以简单地调用[UIImage imageWithCGImage:group.posterImage]但在Swift中,UIImage(CGImage: group.posterImage)给我一个编译器错误:

Could not find an overload for 'init' that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

core-foundation uiimage cgimage swift

18
推荐指数
2
解决办法
2万
查看次数