小编que*_*dam的帖子

Xcode预处理器宏来检查Base SDK> = iOS 7.0

是否只有在Base SDK为7.0或更高版本时,是否有任何预处理器宏来编译代码的某些部分?"__IPHONE_7_0"定义的常量似乎与iOS开发目标(而不是基本SDK)相关联.

我正在使用安装了iOS 7和iOS 6.1的XCode 5.

我之所以这么说是因为我正在将应用程序从iOS 6转换到iOS 7.有很多东西需要调整,我现在还想用iOS 6.1作为基础SDK编译我的应用程序(和开发目标iOS 6.0),但是我想在每次使用iOS 7 SDK编译时添加一些我想要的代码,但是如果base SDK是iOS 6.1则不能编译.

例:

if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    [_tableView setSeparatorInset:UIEdgeInsetsZero];
}
Run Code Online (Sandbox Code Playgroud)

上面这段代码不能用iOS 6.1 base SDK编译,因为它抱怨没有为UITableView定义setSeparatorInset.因此,我想在预处理器指令中包含这段代码,有条件地在基本SDK上.

xcode ios ios7

32
推荐指数
3
解决办法
4万
查看次数

剩余空间中的自动布局居中视图(以编程方式)

如何以编程方式添加自动布局约束以使剩余空间中的视图居中(请参见下面的示例图片)?

在此输入图像描述

目前,我在底部添加了一个容器视图,然后我将视图置于容器视图中心,但我想知道是否有其他解决方案而不需要使用容器视图.

iphone ios autolayout

21
推荐指数
1
解决办法
2891
查看次数

在iOS 8上获取设备的序列号

对于内部应用程序,我们使用以下代码UIDevice + serialNumber来获取设备序列号.但是,似乎在iOS 8中,注册表项"IOPlatformSerialNumber"为空.序列号可以通过其他方式获得吗?

iphone iokit ios ios8

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

node.js中的HTTP keep-alive

我正在尝试建立一个HTTP客户端,以便在node.js中保持底层连接打开(保持活动状态),但似乎该行为与文档不对应(http://nodejs.org/api/http .html #http_class_http_agent).

我正在创建一个新的HTTP代理,将maxSockets属性设置为1并每秒请求一个url(例如http://www.twilio.com/).

似乎每次请求都关闭套接字并创建一个新套接字.我在Ubuntu 14.04下使用node.js 0.10.25和0.10.36对此进行了测试.

有没有人能够继续工作?

这是代码:

var http = require("http");

var agent = new http.Agent();
agent.maxSockets = 1;

var sockets = [];

function request(hostname, path, callback) {
    var options = {
        hostname: hostname,
        path: path, 
        agent: agent, 
        headers: {"Connection": "keep-alive"}
    };
    var req = http.get(options, function(res) {
        res.setEncoding('utf8');
        var body = "";
        res.on('data', function (chunk) {
            body += chunk;
        });
        res.on('end', function () {
            callback(null, res, body);
        });
    });
    req.on('error', function(e) {
        return …
Run Code Online (Sandbox Code Playgroud)

http keep-alive node.js

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

使用信号量实现的NSURLConnection阻塞包装器

对于我最近的项目,我偶然发现需要:

  • 以阻塞方式下载数据(在后台线程中启动)
  • 但是在收到数据时也会逐步处理数据(因为下载的数据很容易达到100M,所以将它全部存储在一个大的NSData*中效率不高)

因此,我需要使用异步NSURLConnection对象(以便能够逐步接收数据),但将其包装在一个容器中,该容器将阻塞两个连续connection:didReceiveData:委托调用之间的调用线程,直到被调用connectionDidFinishLoading:或被connection:didFailWithError:调用.

我想我会分享我的解决方案,因为我花了几个小时把这里和那里找到的正确代码放在一起(在StackOverflow和其他论坛上).

代码基本上NSURLConnection在后台线程(dispatch_get_global_queue)上启动一个新的,设置运行循环以便能够接收委托调用,并用于dispatch_semaphores以"交替"方式阻止调用和后台线程.该dispatch_semaphores代码是很好的包裹定制内部ProducerConsumerLock类.

BlockingConnection.m

#import "BlockingConnection.h"
#import "ProducerConsumerLock.h"

@interface BlockingConnection()

@property (nonatomic, strong) ProducerConsumerLock* lock;

@end

@implementation BlockingConnection

- (id)initWithURL:(NSURL*) url callback:(void(^)(NSData* data)) callback {
    if (self = [super init]) {
        self.lock = [ProducerConsumerLock new];

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
            [NSURLConnection connectionWithRequest:request delegate:self];
            while(!self.lock.finished) {
                [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
            }
        });

        [self.lock consume:^(NSData* data) { …
Run Code Online (Sandbox Code Playgroud)

iphone macos objective-c nsurlconnection ios

6
推荐指数
0
解决办法
1176
查看次数

更改 iOS 模拟器键盘布局以匹配 Macbook 键盘

我有一台带有 Azerty(法语)键盘的 Macbook。每当我启动 iOS 模拟器时,默认键盘布局是 Qwerty(荷兰语),因此当我使用 macbook 的物理硬件键盘打字时,某些键(A、Z、M...)不匹配。设置Hardware > Keyboard > iOS Uses Same Layout为 OSX 已启用。我知道如何在进入模拟器上的设置应用程序时更改键盘设置,但是每次重新启动模拟器时都会忘记设置(在不同模拟器之间切换时经常发生这种情况),所以这是一个真正的 PITA。有没有办法来解决这个问题?

ios ios-simulator

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

闭包需要对“self”进行唯一访问,但它已经被借用了

我基本上有以下代码需要修改向量场(通过函数删除一些项目retains),并且在该函数的谓词中retains,我需要在 self 上调用一个可变函数:

struct Task {}

struct Processor {
    counter: u32,
    tasks: Vec<Task>
}

impl Processor {
    
    fn execute(&mut self, task: &Task) -> bool {
        self.counter += 1;
        // Do some stuff with task and return wether it was sucessfully executed
        true
    }

    fn run(&mut self) {
        self.tasks.retain(|task| !self.execute(task))
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨两个错误:

error[E0501]: cannot borrow `self.tasks` as mutable because previous closure requires unique access
  --> src/main.rs:90:9
   |
90 |         self.tasks.retain(|task| !self.execute(task))
   |         ^^^^^^^^^^^------^------^^----^^^^^^^^^^^^^^^
   |         |          | …
Run Code Online (Sandbox Code Playgroud)

rust

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