我需要从服务器下载的原始数据初始化图像,该服务器根据iPhone客户端的类型提供正确的图像大小.
我知道我应该设置刻度值是640×960显示屏上2.0,然而,这是一个只读属性,不能初始化期间使用initWithData时设置.
有任何想法吗?
在创建新类时,我倾向于默认使用.mm扩展名,以便我可以在以后使用ObjC++.
这样做有什么不利吗?你.m什么时候喜欢?并.m编译成可执行更快(这是由于C通常比C++更快)?
我有一个应用程序,有三个按钮(实际上UIView是)水平放置在导航栏下方.
这三个按钮的尺寸足够大(例如,比后退按钮大),但是当击中大致位于前三分之一时,它们不会响应触摸.
我知道直接位于导航栏下方的这个区域对于后退按钮和其他UINavigation项目来说是"保留"的,其触摸区域扩展到导航栏之外(相当大的余量),但在某些情况下还有甚至附近的一个导航项目来窃取事件,我的观点仍然没有回应.
奇怪的是,我正在调用hitTest我的UIView中的方法,而不是touchesBegan/Ended/etc.
结果是按下按钮是非常困难的,如果一个在a附近的任何地方UINavigationItem,该项目将窃取事件,即使hitTest我正在返回正确UIView的系统.
不幸的是,我是实施者,而不是设计师,因此设计变更是最后的手段.
有任何想法吗?谢谢!
我正在寻找在我的公司进行测试,但我对最好的开始方式有点模糊.
我知道我可以使用框架进行单元测试,例如OCUnit,GHUnit或SenTestingKit ......到目前为止一切都很好.我可以使用Mock对象制作一个逻辑测试我的项目的目标.
我也知道使用UIAutomation和javascript来驱动和测试GUI.
所以,现在如果我实现一个相当复杂的GUI功能,我想对我的代码进行逻辑测试,并使用UIAutomation测试GUI.我如何结合这两种方法,或者他们分开处理,在这种情况下,我会承担,我需要写2组测试中2种不同的语言进行全面测试一个功能?
从侧面说明,如果有人可以提供良好的链接,以便在已经成熟且不那么模块化的代码库上开始测试的建议,那将非常感激.
谢谢!
我试图使用Decorator模式'装饰'UICollectionViewCells.
例如,如果我有
BaseCell : UICollectionViewCell
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
BaseCell *cell = [[BaseCell alloc] initWithFrame]
cell = [[GlowingCell alloc] initWithCell:cell];
cell = [[BorderedCell alloc] initWithCell:cell];
cell = [[LabelledCell alloc] initWithCell:cell];
// cell is now a glowing, bordered, labelled cell.
Run Code Online (Sandbox Code Playgroud)
我认为Decorator模式对于这类事情来说非常简洁,但是我很难将它应用于集合视图.
首先,在UICollectionViewControllers中,您需要注册一个类,如下所示:
[self.collectionView registerClass:cellClass forCellWithReuseIdentifier:cellIdentifier];
Run Code Online (Sandbox Code Playgroud)
所以我没有机会制作自己的实例.
其次,我无法看到装饰器如何用于装饰"非纯"对象,即我没有从头开始创建但具有自己的属性和行为的对象(例如UICollectionViewCell).因为在上面的示例中,cell表示LabelledCell的新实例,并且如果UICollectionView对方法进行调用,例如,除非我在Decorator基类中专门执行此操作,否则isSelected将调用aLabelledCellInstance.isSelected它:
- (BOOL)isSelected {
return self.decoratedCell.isSelected;
}
Run Code Online (Sandbox Code Playgroud)
对于一种方法来说哪个好,但是必须覆盖每个方法似乎都是正确的UICollectionViewCell.我应该用forwardInvocation:吗?
我是否滥用这种模式,还有其他选择吗?因为当你必须覆盖像这样的基本方法时,它在书籍中的效果非常好
getPrice() {
return decoratedObject.getPrice() + 1.10f;
}
Run Code Online (Sandbox Code Playgroud)
..但似乎很难适应实际用自定义行为装饰现有UI元素的目的.
谢谢
编辑:我想避免的是这样的课程:
在纸面上,装饰师是我想要实现的目标的完美候选者,但实施绝对难以理解.
我有一个大的XML文件,它被打开,加载到内存中,然后由Python类关闭.简化示例如下所示:
class Dictionary():
def __init__(self, filename):
f = open(filename)
self.contents = f.readlines()
f.close()
def getDefinitionForWord(self, word):
# returns a word, using etree parser
Run Code Online (Sandbox Code Playgroud)
在我的Flask应用程序中:
from dictionary import Dictionary
dictionary = Dictionary('dictionary.xml')
print 'dictionary object created'
@app.route('/')
def home():
word = dictionary.getDefinitionForWord('help')
Run Code Online (Sandbox Code Playgroud)
我理解在理想的世界中,我会使用数据库而不是XML,并在每次请求时建立与此数据库的新连接.
我从文档中了解到,Flask中的应用程序上下文意味着每个请求都会dictionary = new Dictionary('dictionary.xml')重新创建,因此在磁盘上打开一个文件并将整个内容重新读入内存.但是,当我查看调试输出时dictionary object created,尽管从多个源(不同的会话?)连接,但我看到该行只打印了一次.
我的第一个问题是:
因为我的应用程序似乎只加载XML文件一次...然后我可以假设它全局驻留在内存中,并且可以通过大量的同时请求安全地读取,仅限于我服务器上的RAM - 对?如果XML是50MB,那么大约需要.内存50MB,可以高速同步请求...我猜这并不容易.
我的第二个问题是:
如果不是这样的话,那么我对处理大量流量的能力有什么限制?如果我重复打开50MB XML,从磁盘读取并关闭,我可以处理多少个请求?我一次假设一个.
我意识到这是模糊的,依赖于硬件,但我是Flask,python和网络编程的新手,只是寻找指导.
谢谢!
标题或多或少都说明了一切.为了回应一个touchesBegan事件,我UIViewController重新着手并添加了一些子视图.
它永远不会收到touchesEnded.我猜是因为添加的子视图以某种方式拦截了事件.我试着调用resignFirstResponder子视图无济于事.
当我不添加子视图并且触摸事件被正常调用时,代码工作正常.
有任何想法吗?
谢谢
编辑:一些细节和我如何修复它.
基本上我有一个带有一些子视图的主视图,当我触摸子视图时,事件将被传递到主视图,但是,在此事件中,我正在删除子视图并在其位置添加新视图.触摸起源于不再存在的子视图这一事实意味着其余的触摸都丢失了.
我通过在主视图中覆盖hitTest:withEvent来修复此问题,以阻止对子视图进行测试
我在拆分视图的主窗格中使用了UISplitViewController一个UITabBarController带有plain 的内部,在详细信息窗格中使用了一个plain ,它本身包含一个vanilla .UIViewControllerUINavigationControllerUIViewController
我知道Apple建议仅在根级别使用拆分视图,但是我已经看到其他应用程序(例如,亚马逊 - "愿望清单"选项卡)在选项卡中使用拆分视图,因此我确信这是可能的.
我的问题是分割视图的委托方法,即.那些UISplitViewControllerDelegate没有被调用,这阻止我在切换到纵向模式时创建我的弹出菜单.
有问题的方法如下 -
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so …Run Code Online (Sandbox Code Playgroud) 如何使用Swift包管理器包含C代码(在我的情况下,单个.c文件和头文件),而无需用户安装我的C库/usr/local/lib?
我曾想过在我的主包的子目录中创建一个包含头+ lib的子包,并使用相对路径,最后构建swift build -Xlinker ./relative/path/to/mylib,但是我没有成功解决依赖,因为它应该是一个独立的git存储库.错误信息是:
error: failed to clone; fatal: repository '/absolute/path/to/mylib' does not exist
此外,我不清楚使用-Xlinker旗帜是否正确.
我不能使用带有纯SwiftPM方法的桥接头,并且在系统范围内安装我的库似乎有点矫枉过正,也不是非常便携.
有任何想法吗?
我有一个UIViewController用正确的框架初始化,但是在我的代码中,框架被破坏了,我很难找到哪里.
在这种情况下,它通常watch对调试器中的变量很方便,但是我无法在变量视图中访问controller-> view-> frame属性,因为它不是变量,它是一个属性(令人惊讶的是)
在变量显示中钻进UIView显示了一些东西,但我无法与框架相关,我想也许会有,layer但事实并非如此.
有没有办法监视私有API的变化?我猜不是,因为变量基本上是"隐藏的",所以你无法准确指定watch.
或者,我可以使用其他方法吗?我已经尝试了子类化UIView,设置我的UIViewController的视图指向这个子类并打破setFrame方法,但它似乎不起作用.
编辑:子类化UIView方法DID工作,我只需要将视图设置为指向我的测试子类viewDidLoad而不是init方法.让这个问题保持开放,因为我不确定这是否是解决这类问题的最佳方式......