小编Cha*_*pta的帖子

predicateWithBlock中块的bindings参数是什么:用于?

声明+[NSPredicate predicateWithBlock:]如下:

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
Run Code Online (Sandbox Code Playgroud)

Apple的块的第二个参数的文档bindings说,它是:

替换变量字典.字典必须包含接收器中所有变量的键值对.

我无法弄清楚为什么需要这个参数 - 我也没看到它被用在任何地方.为什么会这样?

另外,bindings在使用基于块的谓词时,是否需要查看内部-[NSArray filteredArrayUsingPredicate:]

cocoa cocoa-touch objective-c nspredicate

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

配置文件文件中plist周围的二进制数据是什么?

.mobileprovision文件的结构如下所示:

<!-- small binary data -->

<?xml version="1.0" encoding="UTF-8"?>
<!-- plist data -->
</plist>

<!-- large binary data -->
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  1. 这个二进制数据是什么?
  2. 它有用吗?
  3. 如何在不搜索XML边界的情况下从.mobileprovision文件中提取plist?

具体来说,当上面的Q1和Q3都得到回答时,我会将这个问题视为已回答(并同时授予+100奖励).

xcode cocoa-touch plist ios provisioning-profile

20
推荐指数
2
解决办法
6788
查看次数

我应该使用==或[NSManagedObject isEqual:]来比较同一上下文中的托管对象吗?

假设变量A和B在同一个托管对象上下文中保存托管对象的实例.我需要确保它们与持久性存储中的相同"记录"相关联." 核心数据编程指南"中关于" 故障和取消 "的部分说:

核心数据确保在给定的托管对象上下文中 - 持久性存储中的条目仅与一个托管对象相关联.

由此看来,指针比较似乎足以达到我的目的.或者使用isEqual是否有意义:在同一个上下文中比较托管对象?

cocoa core-data objective-c

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

如何使NSOutputStream重定向到标准输出?

我想知道什么是NSOutputStream重定向到标准输出的最佳方法.我现在使用的技术是使用输出流写入内存,获取其数据并将其打印到stdout:

  NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];
  [stream open];
  // calls to stream's -write:maxLengh:
  NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
  NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  printf("%s", [string UTF8String]);
  [stream close];
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?具体来说,我不满意这种方法的两件事:

  1. 对于写入流的数据需要额外的内存

  2. 此流不可重用 - 在我从此流中检索数据后[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey],流不会"重置",即我希望后续调用此方法只给我新数据,但事实并非如此.这意味着每次写入stdout后我都必须创建一个新的NSOutputStream.

io cocoa objective-c

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

如何在Xcode控制台中漂亮打印NSError对象?

我在Xcode控制台(通过NSLog(@"%@", error);)中打印了一个NSError对象,对于某种错误,这就是我得到的:

Domain=NSCocoaErrorDomain Code=133020 "The operation couldn’t be completed. (Cocoa error 133020.)" UserInfo=0xe939170 {conflictList=(
    "NSMergeConflict (0xe93cad0) for NSManagedObject (0x5dba970) with objectID '0x5dc26f0 <x-coredata://775D53AE-58A4-4B18-BA52-D46781A183AE/SomeObject/p1>' with oldVersion = 2 and newVersion = 3 and old object snapshot = {\n    creationDate = \"2011-08-24 06:52:22 +0000\";\n    prop1 = \"a65e349a-b315-488e-b7f8-e459e353fd6e\";\n    username = \"test-user\";\n    password = \"foobar\";\n} and new cached row = {\n    creationDate = \"2011-08-24 06:52:22 +0000\";\n    prop1 = \"a65e349a-b315-488e-b7f8-e459e353fd6e\";\n    username = \"test-user\";\n    password = \"foobar\";\n}"
Run Code Online (Sandbox Code Playgroud)

当我用换行符替换所有'\n'和换行符中的所有'\n'时,我得到一个格式很好的错误消息:

Domain=NSCocoaErrorDomain Code=133020 "The operation couldn’t be …
Run Code Online (Sandbox Code Playgroud)

debugging macos xcode cocoa ios

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

在特定的后台线程上运行匿名块

乍一看,这似乎是一个简单的问题,但我无法想象如何在某个背景线程上运行匿名块,即我正在寻找相当于的块-performSelector:onThread:withObject:waitUntilDone:.

相关:是否可以将调度队列与某个后台线程相关联,就像主队列与应用程序的主线程相关联一样?

编辑澄清我正在寻找运行匿名块

cocoa cocoa-touch objective-c grand-central-dispatch

8
推荐指数
2
解决办法
5355
查看次数

当为stdout打开非阻塞I/O时,操作系统是否也可以为stdin打开它?

我注意到OS X和Linux上都有一些意外的行为.打开O_NONBLOCK标准输出的非阻塞I/O(使用)也可以打开标准输入!

这些操作系统是否正常运行?如果是这样,这个行为是否由POSIX定义?如果是这种情况,请指出相关文件.

这是我用来测试这个的示例程序:

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
  int flags = fcntl(STDOUT_FILENO, F_GETFL);
  if (argc > 1 && strcmp(argv[1], "1") == 0) {
    fcntl(STDOUT_FILENO, F_SETFL, flags | O_NONBLOCK);
  }
  printf("stdout O_NONBLOCK is: %d\n", fcntl(STDOUT_FILENO, F_GETFL) & O_NONBLOCK);
  printf("stdin O_NONBLOCK is: %d\n", fcntl(STDIN_FILENO, F_GETFL) & O_NONBLOCK);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在OS X上:

$ clang -o fd-test fd-test.c
$ ./fd-test
stdout O_NONBLOCK is: 0
stdin O_NONBLOCK is: 0
$ ./fd-test …
Run Code Online (Sandbox Code Playgroud)

c linux macos posix

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

滚动时UITableView节页脚重叠

我有一个UItableview,我以编程方式获得了section header&footer.

最初我遇到了在滚动上重叠的sectio标题的问题,我使用scrollViewDidScroll委托解决了

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    heightForHeader = 40.0;
    if (scrollView.contentOffset.y<=heightForHeader&&scrollView.contentOffset.y>=0) {
        scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
    } else if (scrollView.contentOffset.y>=heightForHeader) {
        scrollView.contentInset = UIEdgeInsetsMake(-heightForHeader, 0, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在下一个问题是滚动时重叠的部分页脚.

你能帮帮我吗?

objective-c ipad

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

iOS是否支持TLS压缩?

我需要压缩通过我的iOS应用程序中的安全通道发送的数据,我想知道是否可以使用TLS压缩.我无法弄清楚Apple的TLS实现Secure Transport是否支持相同的功能.

有没有其他人知道iOS是否支持TLS压缩?

compression ssl cocoa-touch ios

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

无法在gdb或lldb中设置观察点

我正在尝试在设备上调试我的应用程序时设置观察点.我无法在gdb或lldb上设置它.

在lldb上,我没有watchpoint set在调试器中看到该选项,即使该页面提到它存在.当我尝试运行时watchpoint set,lldb告诉我该命令无效.

在gdb上,我确实设置了watchpoint(使用watch var),但是当我尝试继续执行时,我得到了这个:

Can't set hardware watchpoints without the 'Z2' (write-watchpoint) packet.
Run Code Online (Sandbox Code Playgroud)

我在gdb窗口中看不到其他输出,也不认为我可以与它进行交互.此应用程序也保持挂起.

我在OS X Lion上使用Xcode 4.3.2(4E2002).我尝试在iOS 5.1和iOS 5.0.1的设备上设置观察点,但两者都遇到同样的问题.

debugging cocoa-touch gdb ios lldb

4
推荐指数
1
解决办法
1829
查看次数

如何获取Lisp进程中可用的所有环境变量的列表?

我想枚举我的Lisp进程中可用的所有环境变量的列表.我想要C变量返回的相同列表environ.

SBCL和Clozure CL似乎都没有开箱即用.我可以用CFFI做吗?

lisp sbcl common-lisp ccl cffi

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