小编Sam*_*Sam的帖子

Retina显示和[UIImage initWithData]

我需要从服务器下载的原始数据初始化图像,该服务器根据iPhone客户端的类型提供正确的图像大小.

我知道我应该设置刻度值是640×960显示屏上2.0,然而,这是一个只读属性,不能初始化期间使用initWithData时设置.

有任何想法吗?

iphone cocoa-touch uiimage

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

Objective-C,.m/.mm的性能差异?

在创建新类时,我倾向于默认使用.mm扩展名,以便我可以在以后使用ObjC++.

这样做有什么不利吗?你.m什么时候喜欢?并.m编译成可执行更快(这是由于C通常比C++更快)?

iphone objective-c objective-c++

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

触摸未调用导航栏~8像素内的事件

我有一个应用程序,有三个按钮(实际上UIView是)水平放置导航栏下方.

这三个按钮的尺寸足够大(例如,比后退按钮大),但是当击中大致位于前三分之一时,它们不会响应触摸.

我知道直接位于导航栏下方的这个区域对于后退按钮和其他UINavigation项目来说是"保留"的,其触摸区域扩展到导航栏之外(相当大的余量),但在某些情况下还有甚至附近的一个导航项目来窃取事件,我的观点仍然没有回应.

奇怪的是,我正在调用hitTest我的UIView中的方法,而不是touchesBegan/Ended/etc.

结果是按下按钮是非常困难的,如果一个在a附近的任何地方UINavigationItem,该项目将窃取事件,即使hitTest我正在返回正确UIView的系统.

不幸的是,我是实施者,而不是设计师,因此设计变更是最后的手段.

有任何想法吗?谢谢!

iphone uinavigationbar uiview

9
推荐指数
1
解决办法
2269
查看次数

XCode4单元测试和UIAutomation

我正在寻找在我的公司进行测试,但我对最好的开始方式有点模糊.

我知道我可以使用框架进行单元测试,例如OCUnit,GHUnit或SenTestingKit ......到目前为止一切都很好.我可以使用Mock对象制作一个逻辑测试我的项目的目标.

我也知道使用UIAutomation和javascript来驱动和测试GUI.

所以,现在如果我实现一个相当复杂的GUI功能,我想对我的代码进行逻辑测试,并使用UIAutomation测试GUI.我如何结合这两种方法,或者他们分开处理,在这种情况下,我会承担,我需要写2组测试中2种不同的语言进行全面测试一个功能?

从侧面说明,如果有人可以提供良好的链接,以便在已经成熟且不那么模块化的代码库上开始测试的建议,那将非常感激.

谢谢!

iphone unit-testing xcode4 ios-ui-automation

8
推荐指数
1
解决办法
2490
查看次数

装饰模式,iOS/UICollectionViewCells的麻烦

我试图使用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元素的目的.

谢谢

编辑:我想避免的是这样的课程:

  • GlowingBorderedCell
  • LabelledGlowingBorderedCell
  • 等等

在纸面上,装饰师是我想要实现的目标的完美候选者,但实施绝对难以理解.

iphone design-patterns decorator ios uicollectionview

8
推荐指数
1
解决办法
495
查看次数

Flask:使用全局变量将数据文件加载到内存中

我有一个大的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和网络编程的新手,只是寻找指导.

谢谢!

python flask

8
推荐指数
1
解决办法
4445
查看次数

添加subView后没有收到touchesEnded/Moved/Cancelled

标题或多或少都说明了一切.为了回应一个touchesBegan事件,我UIViewController重新着手并添加了一些子视图.

它永远不会收到touchesEnded.我猜是因为添加的子视图以某种方式拦截了事件.我试着调用resignFirstResponder子视图无济于事.

当我不添加子视图并且触摸事件被正常调用时,代码工作正常.

有任何想法吗?

谢谢

编辑:一些细节和我如何修复它.

基本上我有一个带有一些子视图的主视图,当我触摸子视图时,事件将被传递到主视图,但是,在此事件中,我正在删除子视图并在其位置添加新视图.触摸起源于不再存在的子视图这一事实意味着其余的触摸都丢失了.

我通过在主视图中覆盖hitTest:withEvent来修复此问题,以阻止对子视图进行测试

iphone cocoa-touch uiviewcontroller uiview uitouch

7
推荐指数
1
解决办法
3208
查看次数

未调用UISplitViewController委托方法

我在拆分视图的主窗格中使用了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)

ipad uisplitviewcontroller uiinterfaceorientation

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

Swift Package Manager C-interop:非系统库

如何使用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方法的桥接头,并且在系统范围内安装我的库似乎有点矫枉过正,也不是非常便携.

有任何想法吗?

c interop swift swift-package-manager

7
推荐指数
1
解决办法
1693
查看次数

如何检测UIView何时改变大小?

我有一个UIViewController用正确的框架初始化,但是在我的代码中,框架被破坏了,我很难找到哪里.

在这种情况下,它通常watch对调试器中的变量很方便,但是我无法在变量视图中访问controller-> view-> frame属性,因为它不是变量,它是一个属性(令人惊讶的是)

在变量显示中钻进UIView显示了一些东西,但我无法与框架相关,我想也许会有,layer但事实并非如此.

有没有办法监视私有API的变化?我猜不是,因为变量基本上是"隐藏的",所以你无法准确指定watch.

或者,我可以使用其他方法吗?我已经尝试了子类化UIView,设置我的UIViewController的视图指向这个子类并打破setFrame方法,但它似乎不起作用.

编辑:子类化UIView方法DID工作,我只需要将视图设置为指向我的测试子类viewDidLoad而不是init方法.让这个问题保持开放,因为我不确定这是否是解决这类问题的最佳方式......

iphone debugging uiviewcontroller uiview

5
推荐指数
2
解决办法
6979
查看次数