小编Cen*_*ion的帖子

如何水平居中两个标签?

我有非常简单的要求,其中两个标签必须水平居中.所以,我选择了它们并水平选择了Editor-> align-> center.然后将容器约束的顶部空间添加到它们.我还需要标签来缩小/增加内容大小.但是,IB显示错误和几个警告.我可以通过在它们之间添加引脚(水平空间)来使标签缩小/增长,但在这种情况下它们不会居中.以下是截图:

在此输入图像描述

这是错误和警告:

在此输入图像描述

UPDATE theraven提出了一个有趣的建议,即使用虚拟视图将其水平居中并将两个标签固定到它上面.我删除了所有现有的约束,添加了这个虚拟视图和中心X +中心Y约束.然后为它添加了两个标签(添加了水平空间约束).但是,我仍然收到一堆错误和警告:

在此输入图像描述 在此输入图像描述

UPDATE2只是更新问题,但仍未找到有效答案.@Theraven解决方案适用于iPhone4,iPhone4S,iPhone5和iPhone5S,但它不是真正的中心,而是一种解决方法.因此,对于iPhone6和iPhone6 Plus,它不起作用,因为前导和尾随空格将被修复,并且不会自动调整大小的宽度.

objective-c interface-builder uilabel ios autolayout

12
推荐指数
2
解决办法
8921
查看次数

如何添加"将底部对齐:父视图"系统约束?

刚刚创建了一个演示单视图控制器项目.Controller视图包含集合视图,它包含单元格视图(橙色).单元格视图包含一个视图(在内部选中),我需要将其对齐到单元格视图的底部.但是,当我在单元格视图中选择橙色视图时,按Ctrl键并将其拖动到单元格视图我没有看到"将底部对齐到容器视图"或类似内容.只有"容器的底部空间"选择,我不确定它是否具有相同的行为:

在此输入图像描述

如果我选择"底部空间到容器"并且没有得到所需的"将底部对齐到父级"系统约束:

在此输入图像描述

我需要在现有代码库中添加一个带有自动布局的新标签,并且标签必须位于现有标签旁边,该标签具有"将底部对齐:父单元格"系统约束:

在此输入图像描述

如果我选择新标签并按下底部的对齐按钮图标,则会有一些设置为"底边".但是,无论如何都禁用此选择,我认为这是用户约束,但我需要系统约束"将底部对齐:父单元格".任何建议为什么现有标签有这个约束,但我不能添加类似的新标签?

在此输入图像描述

objective-c ios autolayout

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

视网膜问题:如何使UIView的宽度恰好为1像素而不是2像素?

我知道我们在点而不是像素上操作,在大多数情况下它很方便,但我需要使UIView为1像素而不是2像素高度.因此,如果您在Interaface构建器中拖放一些UIView(分隔线),并使其高度为1px(点),那么它仍然看起来像视网膜屏幕上的2像素大小线(在设备和模拟器上).

我知道视图上有contentScaleFactor属性,它显示的是视网膜(2.0f)与否(1.0f).看起来这些视图的值为1.0f,因此您需要从主屏幕中检索它:

[UIScreen mainScreen].scale; 
Run Code Online (Sandbox Code Playgroud)

这让我回归2.0f.现在,我为此分隔符视图添加了高度约束,添加了检查isRetina的方法并将该行划分为1个像素:

- (void)awakeFromNib{

  [super awakeFromNib];

  CGFloat isRetina = ([UIScreen mainScreen].scale == 2.0f) ? YES : NO;

  if (isRetina) {

    self.separatorViewHeightConstraint.constant /= 2;
  }
}
Run Code Online (Sandbox Code Playgroud)

这有效,我只是不确定使用0.5值是个好主意......

objective-c ios

11
推荐指数
3
解决办法
5817
查看次数

如何使用gziped内容发送HTTP POST请求?

我正在开发iPhone应用程序并手动构建POST请求.目前,需要在发送之前压缩JSON数据,以便了解如何告知服务器内容是否已压缩.将内容类型标头设置为gzip可能是不可接受的,因为服务器需要JSON数据.我正在寻找透明的解决方案,就像添加一些标题,告诉JSON数据压缩成gzip.

我知道,标准的方法是告诉服务器客户端接受编码,但是你需要首先使用accept编码头发出GET请求.就我而言,我想发布已编码的数据.

iphone gzip http objective-c http-post

10
推荐指数
2
解决办法
7678
查看次数

Table Data Gateway的实现与Active Record有何不同?

简单地说一下Table Data Gateway(TDG)实现:您创建单独的TDG类,其中包含用于具有特定表的CRUD操作的SQL.因此,您的模型不是直接与数据源(例如数据库)通信,而是通过那些抽象的 - TDG类.因此,它只是一种进行另一级抽象的方法,它只是与数据库通信的包装器 - 获取和修改数据.恕我直言TDG类不应包含成员,只能包含方法.这是一个可视化使用TDG模式的好模式.使用TDG方法时,SQL应该从模型类移动到数据源(TDG)类.我通过TDG类从DB检索的所有数据都存储在我的模型成员中.

现在,活跃的记录实施怎么样?如果我将数据访问和我的模型类合并到一个模型类中,那么我会实现活动记录吗?我无法找到明确的区别或这些模式在PHP中的外观和彼此不同.

通常,我有一个单例数据库类,然后为每个数据库表分离模型类.每个模型类都有CRUD +几个自定义(计数,平均等)操作.有些类具有成员来保持CRUD或自定义操作的结果 - 这是根据需要完成的.这种方法可以被确定为活跃记录吗?另外,如果我将SQL从我的模型类移到TDG类,那么这将是Table Data Gateway吗?

php activerecord design-patterns

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

绕过http响应头Cache-Control:如何设置缓存过期?

来自服务器的所有http响应都带有标题,通知我们的应用不要缓存响应:

Cache-Control: no-cache
Pragma: no-cache
Expires: 0
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用默认缓存策略"NSURLRequestUseProtocolCachePolicy"创建NSUrlRequests,则应用程序将始终从服务器加载数据.但是,我们需要缓存响应,显而易见的解决方案是将这些标头设置为某个时间(例如在后端),设置为10秒.但我对如何绕过此策略并将每个请求缓存10秒的解决方案感兴趣.

为此,您需要设置共享缓存.这可能在AppDelegate didFinishLaunchingWithOptions中完成:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                             diskCapacity:20 * 1024 * 1024
                                               diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
Run Code Online (Sandbox Code Playgroud)

然后,我们需要嵌入我们的代码来强制缓存响应.如果您使用AFHttpClient的实例,则可以通过覆盖以下方法并手动将缓存存储到共享缓存中来完成:

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
              willCacheResponse:(NSCachedURLResponse *)cachedResponse {

  NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy];
  NSMutableData *mutableData = [[cachedResponse data] mutableCopy];
  NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowedInMemoryOnly;

  // ...

  return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response]
                                                data:mutableData
                                            userInfo:mutableUserInfo
                                       storagePolicy:storagePolicy];
}
Run Code Online (Sandbox Code Playgroud)

最后一件事是为请求设置cachePolicy.在我们的例子中,我们希望为所有请求设置相同的缓存策略.所以再次,如果您使用AFHttpClient的实例,那么可以通过覆盖以下方法来完成:

- (NSMutableURLRequest *)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters {

  NSMutableURLRequest *request = [super requestWithMethod:method path:path parameters:parameters]; …
Run Code Online (Sandbox Code Playgroud)

objective-c ios afnetworking

9
推荐指数
2
解决办法
7553
查看次数

我们应该考虑从AFNetworking过渡到NSUrlSession吗?

我已经使用AFNetworking了一段时间,但最近听到的意见NSUrlSession提供了相同的功能AFNetworking,所以不需要使用AFNetworking.大多数情况下,我对这些功能感兴趣,比如操作,客户端和延迟图像下载,但是,不确定我需要写多少额外的代码.有没有人过渡AFNetworkingNSUrlSession

objective-c ios afnetworking nsurlsession

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

修改数组最后一个元素的优雅方式是什么?

我有一组自定义类对象,我需要修改最后一个元素的属性。我知道“last”和“first”是作为getter实现的,但是,这对我没有帮助:)除了通过索引访问最后一个元素之外,还有其他方法吗?

更新

protocol DogProtocol {

  var age: Int {get set}
}

class Dog: DogProtocol {
  var age = 0
}

var dogs = Array<DogProtocol>()
dogs.append(Dog())
dogs.last?.age += 1 // Generates error in playground: left side of mutating operator isn't mutable: 'last" is a get-only property
Run Code Online (Sandbox Code Playgroud)

ios swift

9
推荐指数
3
解决办法
5560
查看次数

核心数据:是否可以在分组中使用自定义功能

在objective-c中制作NSFetchRequest时,是否可以逐个使用自定义函数(strftime)?sql语句在sqlite中完全有效:

select date, count(*) from note group by strftime('%Y%m%d', date)
Run Code Online (Sandbox Code Playgroud)

然而,在经过一天的挖掘和尝试各种方法和解决方案之后,我得出结论,在单个sql fetch中使用核心数据是不可能的.我正在使用带有setPropertiesToGroupBy的NSFetchRequest(仅限iOS 5.0).

UPDATE.有一个例子可以通过apple提供核心数据来获取此类行为.但是,我已启用"-com.apple.CoreData.SQLDebug 1"来显示由核心数据执行的SQL.看来,核心数据没有执行我想要的SQL.它只是通过第一个SQL查询选择它们,然后遍历执行多个"SELEC .. WHERE ID IN ...."SQL查询的组.控制台的摘录:

2012-07-05 10:34:57.244 DateSectionTitles[1139:fb03] CoreData: sql: SELECT 0, t0.Z_PK     FROM ZEVENT t0 ORDER BY t0.ZTIMESTAMP
2012-07-05 10:34:57.245 DateSectionTitles[1139:fb03] CoreData: annotation: sql   connection fetch time: 0.0010s
2012-07-05 10:34:57.246 DateSectionTitles[1139:fb03] CoreData: annotation: total fetch    execution time: 0.0015s for 52 rows.
2012-07-05 10:34:57.247 DateSectionTitles[1139:fb03] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZTIMESTAMP, t0.ZTITLE FROM ZEVENT t0 WHERE  t0.Z_PK IN  (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)  ORDER BY t0.ZTIMESTAMP …
Run Code Online (Sandbox Code Playgroud)

sqlite iphone core-data objective-c

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

ARC:向对象发送nil不会立即调用其dealloc

我正在从手动内存管理过渡到ARC并遇到问题.大多数时候,我通过调用模型类中的performSelectorInBackground来异步执行数据加载.问题是我需要在模型收到nil(发布)时停止任何模型代码执行.在非弧形中,一切都很简单 - 只要用户关闭窗口,其控制器就会开始释放自己并释放其模型[_myModel release],因此模型停止其代码执行(数据加载)并调用其dealloc方法.

这在ARC中似乎有所不同.即使从控制器接收到nil消息,模型仍然执行代码.它的dealloc方法仅在其代码执行(数据加载)后被调用.这是一个问题,因为当用户关闭窗口(控制器)时,代码执行应该尽快停止.这是对代码缺乏控制的某种控制 - 控制器告诉模型 - "走开,我不再需要你的工作",但模型仍然"正在努力完成它的工作":).

想象一下,模型执行一些非常繁重的数据处理,持续时间为10秒.当用户打开窗口(控制器)时,模型开始进行处理.但是图像用户改变主意并在打开窗口后关闭窗口.该模型仍然执行浪费的处理.任何想法如何解决或解决?我不喜欢在我的模型中有一个特殊的BOOL"shouldDealloc"属性,并在控制器dealloc方法中设置为YES,并在我的模型类条件中使用.有更优雅的解决方案吗?

我做了一些演示项目来展示问题.对于测试,只需创建单个视图应用程序并粘贴代码.在ViewController.xib文件中创建按钮 - "开始计算""停止计算",并将其IBActions与startCalculationPressedstopCalculationPressed连接:

ViewController.h

#import "MyModel.h"

@interface ViewController : UIViewController <MyModelDelegate>

- (IBAction)startCalculationPressed:(id)sender;
- (IBAction)stopCalculationPressed:(id)sender;

@end
Run Code Online (Sandbox Code Playgroud)

ViewController.m

@interface ViewController (){

  __strong MyModel *_myModel;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}

- (void)didCalculated …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios automatic-ref-counting

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