UIViewController维护对UICollectionView的引用.控制器应使用UICollectionViewDelegateFlowLayout修改内置流布局.
将视图的数据源设置为self非常容易:
MyViewController.m
- (void)viewDidLoad
{
self.collectionView.dataSource = self;
}
Run Code Online (Sandbox Code Playgroud)
但是如何将控制器设置为视图的委托流布局?
- (void)viewDidLoad
{
self.collectionView.dataSource= self;
// self.collectionView.??? = self;
}
Run Code Online (Sandbox Code Playgroud)
我试过了:
- (void)viewDidLoad
{
self.collectionView.dataSource= self;
self.collectionView.collectionViewLayout = self;
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:"不兼容的指针类型分配......".
集合头文件如下所示:
MyViewController.h
@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
Run Code Online (Sandbox Code Playgroud) 我认为我对REST的大量了解显然是错误的 - 而且我并不孤单.这个问题有很长的引导时间,但似乎是必要的,因为信息有点分散.如果你已经熟悉这个话题,最后会出现实际问题.
从Roy Fielding的第一段开始,REST API必须是超文本驱动的,很明显他认为他的工作被广泛误解:
我对使用REST API调用任何基于HTTP的接口的人数感到沮丧.今天的例子是SocialSite REST API.那就是RPC.它尖叫RPC.显示器上有很多耦合,它应该被赋予X等级.
Fielding继续列出REST API的几个属性.他们中的一些人似乎反对SO和其他论坛的常见做法和共同建议.例如:
应输入REST API,除了初始URI(书签)和适用于目标受众的标准化媒体类型集之外没有任何先验知识(即,任何可能使用API的客户都应该理解)....
REST API不能定义固定资源名称或层次结构(客户端和服务器的明显耦合)....
REST API应该花费几乎所有的描述性工作来定义用于表示资源和驱动应用程序状态的媒体类型,或者为现有标准媒体类型定义扩展关系名称和/或启用超文本的标记....
"超文本"的概念起着核心作用 - 远比URI结构或HTTP动词的含义更重要.其中一条评论中定义了"超文本":
当我[菲尔丁]说超文本时,我指的是信息和控制的同时呈现,使得信息成为用户(或自动机)获得选择和选择动作的可供性.超媒体只是对文本意味着在媒体流中包含时间锚点的扩展; 大多数研究人员都放弃了这一区
超文本不需要是浏览器上的HTML.机器在理解数据格式和关系类型时可以跟踪链接.
我猜这一点,但上面的前两点似乎表明,Foo资源的API文档看起来像下面这样导致客户端和服务器之间的紧密耦合,并且在RESTful系统中没有位置.
GET /foos/{id} # read a Foo
POST /foos/{id} # create a Foo
PUT /foos/{id} # update a Foo
Run Code Online (Sandbox Code Playgroud)
相反,应该强制代理发现所有Foos的URI,例如,针对/ foos发出GET请求.(那些URI可能会遵循上面的模式,但这不是重点.)响应使用的媒体类型能够传达如何访问每个项目以及可以用它做什么,从而产生上述第三点.因此,API文档应侧重于解释如何解释响应中包含的超文本.
此外,每次请求到Foo资源的URI时,响应都包含代理发现如何继续所需的所有信息,例如,通过其URI访问关联资源和父资源,或者在创建后采取措施/删除资源.
整个系统的关键在于响应由媒体类型中包含的超文本组成,该超文本本身传达给代理选项以进行处理.它与浏览器为人类工作的方式没有什么不同.
但这只是我在这个特殊时刻的最佳猜测.
菲尔丁发布了一个后续行动,他回应批评说他的讨论过于抽象,缺乏例子和行话丰富:
其他人会试图以更直接或适用于当今某些实际问题的方式破译我所写的内容.我可能不会,因为我太忙于处理下一个话题,准备会议,写另一个标准,到一些遥远的地方旅行,或者只是做一些让我觉得自己赚到了薪水的小事.
那么,REST专家的两个简单问题就是有一个实际的思维方式:你如何解释菲尔丁在说什么,以及在记录/实现REST API时如何将其付诸实践?
编辑:这个问题是一个例子,说明如果你没有关于你所谈论的内容的名称,学习一些东西是多么困难.在这种情况下,名称是"超媒体作为应用程序状态的引擎"(HATEOAS).
我有一个Java程序,我想在Linux系统上守护进程.换句话说,我想开始在shell中运行它,并在我退出后继续运行它.我也希望能够干净地停止这个程序.
我发现这篇文章使用shell脚本和Java代码的组合来完成这个技巧.它看起来不错,但如果可能的话,我想要更简单的东西.
在Linux系统上守护Java程序的首选方法是什么?
给定一组Java源代码文件,如何将它们编译成一个或多个可以与手工制作的JavaScript一起使用的JavaScript文件?
GWT是一种选择,但到目前为止我见过的每个例子都是为了建立花哨的网站.将Java源代码转换为可与手工JavaScript一起使用的Javascript的简单用例尚未得到充分记录.
我在这个主题的GWT邮件列表上开始了一个帖子,但是对于这是否可行而言,看起来似乎有些混淆.
一个人提供了一个非常有用的提示,即检查GWT-Exporter.问题是源代码和文档都不是现成的,尽管有这个和这个.
编辑:GWT-Exporter源代码在这里
我也看过Java2Script.但同样,我无法找到如何解决我的简单用例的示例.
解决这个问题的最佳方法是什么?有什么比我更好的东西吗?
我在的输出的最后一位看到Firefox和Safari之间的差异Math#atan2。
我的代码:
Math.atan2(-0.49999999999999994, 0.8660254037844387)
Run Code Online (Sandbox Code Playgroud)
Safari(12.1.1)提供,-0.5235987755982988但Firefox(Mac / 67.0)提供-0.5235987755982987。
这当然是微小的差异。但是,似乎所有实现都应该在所有输入上产生相同的输出。例如,这样的差异可能导致if语句根据浏览器遵循不同的路径。
我看到的内容是否违反任何版本的ECMAScript规范?
在WWDC 2012(掌握自动布局的最佳实践)的演讲中,演示者表示您可以在Xcode中设置UIView标识符以帮助调试自动布局:

这似乎是一个非常好的主意,但在我的iOS项目的Xcode 4.5.1中,我无法看到设置UIView的身份.

如何在Xcode 4.5.1中设置UIView的标识?如果在iOS项目中无法做到这一点,我该如何获得相同的功能?
使用Ruby创建gzipped tar存档的最佳方法是什么?
我有一个Rails应用程序需要创建一个压缩存档以响应用户操作.理想情况下,可以直接写入压缩文件,而无需先生成中间临时文件.在红宝石的Zlib库似乎支持直接gzip压缩.我怎样才能将它与焦油输出结合起来?
似乎已经提出了许多准解决方案,并且许多信息似乎已经过时.
例如,"ruby tar"的顶级Google搜索结果给出了这个线程,该线程始于2007年,显然没有解决方案.
另一个高级搜索结果是这个描述红宝石焦油.它的历史可以追溯到2002年,而这一消息并未真正激发人们的信心.
我也看到了各种关于unix tar等的报道.
所以,我知道有很多方法可以做到这一点,但我真的正在寻找一个推荐给那些尝试了一些替代方案的人最可靠和最方便的方法.
有任何想法吗?
有没有人知道REST客户端的实现是否包含Hypermedia作为应用程序状态引擎(HATEOAS)的约束?
在Sun云API似乎是一个不错的选择,从它的记录的方式,判断由作者声明该红宝石,Java和Python的实现是在作品中的效果.但到目前为止,我还没有发现代码的痕迹.
我正在寻找任何东西 - 即使是部分实施也会有所帮助.
我一直在看到" CouchDB可能不是各种情况下最好的工具"的想法.这很有用,但不幸的是也适用于所有技术.
更有用的是描述如何在项目上尝试CouchDB并随后放弃传统的SQL数据库.
如果你在一个项目上尝试过CouchDB,然后又回到SQL数据库,那么哪些因素起了最大的作用?
我有一个Rails应用程序,其公司资源具有嵌套资源 Employee.我正在使用浅层路由,所以要操纵Employee,我的路由是:
GET /employees/1
PUT /employees/1
DELETE /employees/1
POST /companies/1/employees
Run Code Online (Sandbox Code Playgroud)
如何使用ActiveResource创建,读取,更新和销毁员工?
要创建员工,我可以使用:
class Employee < ActiveResource::Base
self.site = "http://example.com/companies/:company_id"
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试做:
e=Employee.find(1, :params => {:company_id => 1})
Run Code Online (Sandbox Code Playgroud)
我得到404,因为在使用浅路由时未定义route/companies /:company_id/employees /:id.
要阅读,编辑和删除员工,我可以使用:
class Employee < ActiveResource::Base
self.site = "http://example.com"
end
Run Code Online (Sandbox Code Playgroud)
但由于缺乏公司外部路线,似乎没有办法创建新的员工.
一种解决方案是定义单独的CompanyEmployee和Employee类,但这似乎过于复杂.
如何在ActiveResource中使用单个Employee类来执行所有四个CRUD操作?