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

这是错误和警告:

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

UPDATE2只是更新问题,但仍未找到有效答案.@Theraven解决方案适用于iPhone4,iPhone4S,iPhone5和iPhone5S,但它不是真正的中心,而是一种解决方法.因此,对于iPhone6和iPhone6 Plus,它不起作用,因为前导和尾随空格将被修复,并且不会自动调整大小的宽度.
刚刚创建了一个演示单视图控制器项目.Controller视图包含集合视图,它包含单元格视图(橙色).单元格视图包含一个视图(在内部选中),我需要将其对齐到单元格视图的底部.但是,当我在单元格视图中选择橙色视图时,按Ctrl键并将其拖动到单元格视图我没有看到"将底部对齐到容器视图"或类似内容.只有"容器的底部空间"选择,我不确定它是否具有相同的行为:

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

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

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

我知道我们在点而不是像素上操作,在大多数情况下它很方便,但我需要使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值是个好主意......
我正在开发iPhone应用程序并手动构建POST请求.目前,需要在发送之前压缩JSON数据,以便了解如何告知服务器内容是否已压缩.将内容类型标头设置为gzip可能是不可接受的,因为服务器需要JSON数据.我正在寻找透明的解决方案,就像添加一些标题,告诉JSON数据压缩成gzip.
我知道,标准的方法是告诉服务器客户端接受编码,但是你需要首先使用accept编码头发出GET请求.就我而言,我想发布已编码的数据.
简单地说一下Table Data Gateway(TDG)实现:您创建单独的TDG类,其中包含用于具有特定表的CRUD操作的SQL.因此,您的模型不是直接与数据源(例如数据库)通信,而是通过那些抽象的 - TDG类.因此,它只是一种进行另一级抽象的方法,它只是与数据库通信的包装器 - 获取和修改数据.恕我直言TDG类不应包含成员,只能包含方法.这是一个可视化使用TDG模式的好模式.使用TDG方法时,SQL应该从模型类移动到数据源(TDG)类.我通过TDG类从DB检索的所有数据都存储在我的模型成员中.
现在,活跃的记录实施怎么样?如果我将数据访问和我的模型类合并到一个模型类中,那么我会实现活动记录吗?我无法找到明确的区别或这些模式在PHP中的外观和彼此不同.
通常,我有一个单例数据库类,然后为每个数据库表分离模型类.每个模型类都有CRUD +几个自定义(计数,平均等)操作.有些类具有成员来保持CRUD或自定义操作的结果 - 这是根据需要完成的.这种方法可以被确定为活跃记录吗?另外,如果我将SQL从我的模型类移到TDG类,那么这将是Table Data Gateway吗?
来自服务器的所有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) 我已经使用AFNetworking了一段时间,但最近听到的意见NSUrlSession提供了相同的功能AFNetworking,所以不需要使用AFNetworking.大多数情况下,我对这些功能感兴趣,比如操作,客户端和延迟图像下载,但是,不确定我需要写多少额外的代码.有没有人过渡AFNetworking到NSUrlSession?
我有一组自定义类对象,我需要修改最后一个元素的属性。我知道“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) 在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) 我正在从手动内存管理过渡到ARC并遇到问题.大多数时候,我通过调用模型类中的performSelectorInBackground来异步执行数据加载.问题是我需要在模型收到nil(发布)时停止任何模型代码执行.在非弧形中,一切都很简单 - 只要用户关闭窗口,其控制器就会开始释放自己并释放其模型[_myModel release],因此模型停止其代码执行(数据加载)并调用其dealloc方法.
这在ARC中似乎有所不同.即使从控制器接收到nil消息,模型仍然执行代码.它的dealloc方法仅在其代码执行(数据加载)后被调用.这是一个问题,因为当用户关闭窗口(控制器)时,代码执行应该尽快停止.这是对代码缺乏控制的某种控制 - 控制器告诉模型 - "走开,我不再需要你的工作",但模型仍然"正在努力完成它的工作":).
想象一下,模型执行一些非常繁重的数据处理,持续时间为10秒.当用户打开窗口(控制器)时,模型开始进行处理.但是图像用户改变主意并在打开窗口后关闭窗口.该模型仍然执行浪费的处理.任何想法如何解决或解决?我不喜欢在我的模型中有一个特殊的BOOL"shouldDealloc"属性,并在控制器dealloc方法中设置为YES,并在我的模型类条件中使用.有更优雅的解决方案吗?
我做了一些演示项目来展示问题.对于测试,只需创建单个视图应用程序并粘贴代码.在ViewController.xib文件中创建按钮 - "开始计算"和"停止计算",并将其IBActions与startCalculationPressed和stopCalculationPressed连接:
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) objective-c ×8
ios ×7
iphone ×3
afnetworking ×2
autolayout ×2
activerecord ×1
core-data ×1
gzip ×1
http ×1
http-post ×1
nsurlsession ×1
php ×1
sqlite ×1
swift ×1
uilabel ×1