小编Who*_*hoa的帖子

Autolayout和程序化约束:如何处理多次触发updateConstraints?

在以编程方式创建布局时,我遵循Apple的建议:覆盖-updateConstraints,添加自定义约束,并在将子视图添加到视图后调用-setNeedsUpdateConstraints.我的典型设置如下:

- (void)setupViews
{
    //Style View

    //Add gesture recognizers

    //Add Subviews


    [self setNeedsUpdateConstraints];
}

- (void)updateConstraints
{
    //Add custom constraints       

    [super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)

问题

有时会多次触发-updateConstraints(例如,当动画呈现或推动视图的控制器时).这里的问题是添加的每个约束都被重新添加.当尝试按需更改添加约束的常量时,这成为一个严重的问题,因为有两个原始约束随后相互冲突.我想,即使你在创建它们之后没有操纵约束,也要加倍你看起来不好的东西.

潜在解决方案

1 - 在-updateConstraints中应用它们之前删除影响视图的所有约束:

 - (void)updateConstraints
    {   
        //Remove all constraints affecting view & subviews

        //Add custom constraints

        [super updateConstraints];       
    }
Run Code Online (Sandbox Code Playgroud)

2 - 在添加自定义约束之前设置布局标志并对其进行检查:

- (void)updateConstraints
{
    if (self.didAddConstraints) {
        [super updateConstraints];
        return;
    }

    //Add custom constraints   

    self.didAddConstraints = YES;    

    [super updateConstraints];
}
Run Code Online (Sandbox Code Playgroud)

3 - 不要担心加倍约束,并且每当需要更改常量时,只需在重新添加之前删除该约束.

3 - 我没想过的东西很棒.


这里的最佳做法是什么?

objective-c ios autolayout

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

iOS Swift:为XCTest分离AppDelegate

由于一些问题,我希望项目中的XCTest目标能够运行单独的应用程序委托.使用ObjC,这是一个相对简单的过程:操作main.m(参见:https://stackoverflow.com/a/15725328/1299041 ).

由于似乎@UIApplicationMain在AppDelegate中初始化了Swift应用程序,是否可以使用单独的AppDelegate为测试目标进行初始化?

ios xctest swift

15
推荐指数
2
解决办法
5703
查看次数

如何将领域数据库迁移到应用程序组?

对最近在应用和扩展程序之间共享Realm数据感到非常兴奋.该文档详细说明了如何将默认域设置为应用程序组目录,我已经开始工作了.

这就是我所坚持的 - 将旧数据库转移到应用程序组中的新位置的最佳方法是什么?

realm ios swift

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

带有自定义初始化程序的UITableViewCell dequeueReusableCellWithIdentifier

我正在使用[UITableView registerClass: forReuseIdentifier:][UITableView dequeueReusableCellWithIdentifier:]为了将UITableViewCells排队和出队。

例如,在viewDidLoad中:

[self.storeTableView registerClass:[StoreLineGraphCell class] forCellReuseIdentifier:@"StoreLineGraphCellIdentifier"];

在cellForRowAtIndexPath中:

StoreLineGraphCell *cell = (StoreLineGraphCell*)[self.storeTableView dequeueReusableCellWithIdentifier:@"StoreLineGraphCellIdentifier"];

为此,initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier将为UITableViewCell调用初始化程序。问题是我需要使用自定义初始化程序才能创建具有必要选项的单元格。例如,可以执行以下操作:

StoreLineGraphCell *cell = [[StoreLineGraphCell alloc] initWithReuseIdentifier:@"StoreLineGraphCell" isLocked:YES isUpcoming:YES];

registerClassdequeue模式似乎无法实现。我想将其保留在初始化程序中,因为它只能运行一次,而不是每次单元出队时都运行一次。是否有适当的方法来实现这一目标?

iphone objective-c uitableview ios

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

redux中的应用程序与本地状态

在许多Redux示例中,SOME_ASYNC_ACTION_ERROR或者SOME_ASYNC_PENDING是调度以操纵全局状态的操作.我想不出这样一种场景,即最初使用全局错误/加载/挂起状态呈现组件是有意义的.当一个组件被销毁并重新安装时,该异步错误需要被"清除",这使得它看起来像操纵组件的本地状态是一个更好的选择.

考虑到这一点,在Redux中处理加载/错误/挂起状态的最佳实践是什么:

  • 组件是否应在本地默认为初始状态,但是仍然订阅加载/错误的全局应用程序状态?
  • 或者在离开组件后是否应重置错误/加载的应用程序状态?
  • 或者这些暂时的国家是否应该在当地进行管理?

javascript reactjs redux

6
推荐指数
1
解决办法
557
查看次数

你如何测试Backbone.js视图是否正确地解除绑定()和销毁()?

我目前正在深入研究Backbone.js,并开发了一些复杂的网络应用程序.我已经对视图(和嵌套视图)管理进行了大量研究,并确保在保留视图或销毁视图时所有事件都是未绑定的.我目前正在使用ThoughtBot的解决方案 - Backbone Support(使用复合视图和交换路由器).

即使我没有遇到有关上述问题的任何问题,有没有办法确保或测试视图是否得到了适当的清理?我希望能够确保我正确地处理事情!

谢谢!

javascript web-applications backbone.js

5
推荐指数
1
解决办法
366
查看次数

阵列过滤器与核心数据拉动性能

我想知道两种不同的数据过滤方法之间的性能差异.这是我正在使用的:

  • 一组核心数据对象
  • 一个UISegmentedControl,表示一个布尔过滤器(学习与未学习)
  • 显示已过滤数据集的UITableView

我认为,这里有两种可能的方法:

  1. 在viewDidLoad中拉取整个核心数据集.当分段控制值发生变化时,使用谓词过滤数据数组.重新加载tableview.
  2. 最初使用谓词拉出核心数据集.当分段控制值更改时,使用更新的谓词重新拉取核心数据集.重新加载tableview.

我知道有些因素会影响答案(数据集的大小,分段控件的使用频率),我只是想知道两者之间是否存在整体最佳实践.

core-data objective-c uitableview uisegmentedcontrol ios

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