小编Kon*_*hin的帖子

是否可以按内容比较两个Objective-C块?

float pi = 3.14;
float (^piSquare)(void) = ^(void){ return pi * pi; };
float (^piSquare2)(void) = ^(void){ return pi * pi; };

[piSquare isEqualTo: piSquare2]; // -> want it to behave like -isEqualToString...
Run Code Online (Sandbox Code Playgroud)

comparison objective-c objective-c-blocks

18
推荐指数
2
解决办法
3232
查看次数

NSFilePresenter -presentedSubitemDidAppearAtURL:方法永远不会被调用

我有一个符合NSFilePresenter协议的对象,该协议代表我基于文档的应用程序文档包.当在包内创建一个新文件时,要么以编程方式使用NSFileManager和正确的NSFileCoordination方法,要么通过Finder我只得到-presentedSubitemDidChangeAtURL:事件,但在这种情况下看起来并不那么明显-presentedSubitemDidAppearAtURL:.

这是预期的行为还是我做错了什么?

-presentedSubitemDidAppearAtURL:NSFilePresenter中的评论明确指出:

通知已添加目录包含的文件或目录.如果此方法未实现但是-presentedItemDidChange,并且该目录实际上是文件包,则文件协调机制将调用-presentedItemDidChange.

cocoa objective-c nsfilecoordinator

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

什么是观察后台任务进度的可可方式?

想象一下以下情况:你有一个后台任务(术语"任务"在这里意味着一个随机计算单元,而不是NSTask!),它是使用任何现代技术实现的,例如Grand Central Dispatch或Operation Queues.主线程上的某些控制器对象想要监视此后台任务的进度并将其报告给用户.

任务进度可以具有以下特征:

  • 不确定或确定
    因为控制器对象必须知道何时将NSProgressIndicator切换到适当的样式.我们可以使用一种约定,即将进度视为不确定,直到实际进度值从零增加.
  • 进度值本身
    一个简单的浮点值
  • 当前阶段NSString的本地化描述
    ,因为与用户的通信是好的

什么设计最适合这些要求,同时也是最可可的?

可以有变种.

代表团

在启动任务之前,将控制器对象设置为委托.

@protocol MyBackgroundTaskDelegate
@required
- (void) progress: (float) value; // 0.0…1.0
@optional
- (void) workingOn: (NSString*) msg; // @"Doing this, doing that…"
@end
Run Code Online (Sandbox Code Playgroud)

实际上,我成功地使用了这个模板很多次,但感觉有点过于冗长.

阻止回调

与委托非常相似,但将代码保存在一个地方.

// Starting our background task...
[MyTask startComputationWithProgressHandler: ^(float progress, NSString* msg)
{
    // Switching to the main thread because all UI stuff should go there...
    dispatch_async(dispatch_get_main_queue(), ^()
    {
        self.progressIndicator.progress = progress;
        self.informationalMessage = msg;
    });
}];
Run Code Online (Sandbox Code Playgroud)

KVO或进展属性的轮询

在这种情况下,后台任务对象必须具有两个类似于以下的属性: …

cocoa multithreading key-value-observing grand-central-dispatch

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