小编zou*_*oul的帖子

什么是"弱框架参考"?

在iphone sdk中对框架的弱引用是什么意思?

iphone objective-c ipad

7
推荐指数
1
解决办法
1360
查看次数

iOS上是否支持私有框架?

最近我开始模仿我的应用程序比以往更加激烈,将代码片段分成框架或库.

我喜欢桌面Cocoa中"私有框架"的概念,即.应用程序包中包含的框架.从我的小经验来看,框架比简单的库更适合代码重用,因为框架可以包含它们自己的头文件.这使得为​​现有项目添加新框架变得更加容易.

问题是iOS上不支持这些"私有"框架.你必须在那里使用静态库,标题管理很痛苦.有没有一个很好的技术理由让Apple不支持iOS上的框架?

(只是为了确保:Apple不幸使用"私有框架"这两个术语.第一个是与应用程序一起提供的"自定义"框架,第二个是未记录的框架,人们不应该在iOS上使用这些框架.我问起前者.)

PS.这是iOS 8中的变化吗?Xcode 6中有一个"Cocoa Touch Framework"模板.

xcode frameworks ios

7
推荐指数
1
解决办法
1158
查看次数

如何将菜单操作路由到窗口内的NSViewController?

我在主应用程序菜单中有一个菜单项,我想将其动作路由到视图控制器(NSViewController).界面层次结构如下所示:有一个主应用程序窗口控制器NSWindowController.在窗口内部有一个分割视图,分割视图中的右视图由分割视图控制NSViewController.

Window + NSWindowController
    `-- NSSplitView
           `-- NSView
           `-- NSView + NSViewController
Run Code Online (Sandbox Code Playgroud)

菜单项连接到Interface Builder中的First Responder.有问题的视图控制器实现了适当的方法,但菜单项保持禁用状态.当我将方法移动到NSWindowController,菜单项被启用.

我想我需要将视图控制器放到响应器链中,所以我将其设置nextResponder为窗口控制器; 没有雪茄.我究竟做错了什么?

macos cocoa nsmenuitem nsresponder

7
推荐指数
1
解决办法
2361
查看次数

块从命名约定中保留循环?

我很惊讶地发现以下行为......

@interface Foo : NSObject

- (void)addBar:(id)aBar withCompletion:(void(^)(void))completion;

@end

@interface AwesomeClass : NSObject

@property (strong, nonatomic) Foo *foo;

- (void)doSomethingWithBar:(id)bar;

@end

@implementation AwesomeClass

- (void)doSomethingWithBar:(id)bar
{
    [self.foo addBar:bar withCompletion:^{
        NSLog(@"%@", self.foo);
    }];
}
Run Code Online (Sandbox Code Playgroud)

在Xcode 4.6.1中,我在实现中得到警告-doSomethingWithBar:,"在这个块中强烈捕获'自我'可能会导致保留周期."

但是,如果我重构名称的方法-addBar:withCompletion:-setupBar:withCompletion:此警告消失.看来我的惊喜表明我对Objective-C命名约定的知识存在差距!

objective-c clang automatic-ref-counting

7
推荐指数
1
解决办法
960
查看次数

如何查找文件夹的所有子文件夹?

我想枚举Haskell中文件夹的所有子文件夹.获取所有文件夹内容很简单,有一个  getDirectoryContents功能.但是我该如何过滤它们呢?由于getDirectoryContents返回a IO [FilePath]filter期望[a],我不能将这两者直接放在一起.(显然,我是一条带有monad和do-notation的新鲜鱼.)

getAllFolders :: FilePath -> IO [FilePath]
getAllFolder path = do
    allItems <- getDirectoryContents path
    -- now what? the predicate is doesDirectoryExist
Run Code Online (Sandbox Code Playgroud)

io monads haskell

7
推荐指数
1
解决办法
225
查看次数

我可以自动将用户导航到系统偏好设置➞隐私吗?

我知道我可以打开安全和隐私偏好设置面板,如下所示:

open /System/Library/PreferencePanes/Security.prefPane
Run Code Online (Sandbox Code Playgroud)

是否可以以编程方式导航到"隐私"选项卡?我想让用户轻松找到合适的屏幕.请注意,此时禁用了辅助功能API,这就是我要在"隐私"选项卡上启用的功能.(这是10.9中新功能.)

macos accessibility osx-mavericks

7
推荐指数
1
解决办法
2245
查看次数

基于消息的体系结构中的通用消息

我正在Swift中尝试基于消息的架构.我正在尝试做类似于Elm Architecture的事情.这是我的代码的样子:

enum SideEffect<Message> {

    case sendRequest((String) -> Message)
}

protocol Component {

    associatedtype Message

    mutating func send(msg: Message) -> [SideEffect<Message>]
}

struct State: Component {

    var something: String?

    enum Message {

        case downloadSomething
        case receiveResponse(String)
    }

    mutating func send(msg: Message) -> [SideEffect<Message>] {
        switch msg {
            case .downloadSomething:
                return [.sendRequest(Message.receiveResponse)]
            case .receiveResponse(let response):
                something = response
                return []
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以状态是建模的State,你可以通过发送Messages 来改变它.如果有任何副作用要计算,它们将作为SideEffect消息返回,并由其他人处理.每条SideEffect消息都带有一个"回调"参数,a Message在副作用结束时发送.这非常有效.

现在,如果我想要一个通用的副作用消息怎么办?我想要这样的东西:

struct Request<ReturnType> { … } …
Run Code Online (Sandbox Code Playgroud)

generics elm swift

7
推荐指数
1
解决办法
232
查看次数

如何解码类型依赖于标记的值数组?

我有一个带有一组值的JSON:

[
    { "tag": "Foo", … },
    { "tag": "Bar", … },
    { "tag": "Baz", … },
]
Run Code Online (Sandbox Code Playgroud)

我想将这个数组解码为一个structs 数组,其中特定类型取决于标记:

protocol SomeCommonType {}

struct Foo: Decodable, SomeCommonType { … }
struct Bar: Decodable, SomeCommonType { … }
struct Baz: Decodable, SomeCommonType { … }

let values = try JSONDecoder().decode([SomeCommonType].self, from: …)
Run Code Online (Sandbox Code Playgroud)

我怎么做?目前我有这个有点丑陋的包装:

struct DecodingWrapper: Decodable {

    let value: SomeCommonType

    public init(from decoder: Decoder) throws {
        let c = try decoder.singleValueContainer()
        if let decoded = try? c.decode(Foo.self) {
            value …
Run Code Online (Sandbox Code Playgroud)

json swift codable

7
推荐指数
2
解决办法
734
查看次数

Swift警告:'weak'不应该应用于协议中的属性声明

看起来协议中不允许使用弱引用.那么,如果我想添加一个弱引用,我该怎么办呢?有什么好主意吗?

protocol PipelineElementDelegate: class {
    func someFunc()
}
protocol PipelineElement {
    weak var delegate: PipelineElementDelegate? { get set}
}
Run Code Online (Sandbox Code Playgroud)

protocols weak-references swift

7
推荐指数
1
解决办法
2057
查看次数

检测Mic中的打击并做一些事情

我找到了这个教程,这很好,但对我不起作用!

这是代码:

- (void)listenForBlow:(NSTimer *)timer {
    [recorder updateMeters];

    const double ALPHA = 0.05;
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;

    if (lowPassResults > 0.95)
        NSLog(@"Mic blow detected");
 //change the background color e.g !
}
Run Code Online (Sandbox Code Playgroud)

在控制台中向我展示这样的nslog研究(没有任何保龄球!):

2010-04-11 23:32:27.935 MicBlow[2358:207] Mic blow detected
2010-04-11 23:32:27.965 MicBlow[2358:207] Mic blow detected
2010-04-11 23:32:27.995 MicBlow[2358:207] Mic blow detected
2010-04-11 23:32:28.026 MicBlow[2358:207] Mic blow detected
2010-04-11 23:32:28.055 MicBlow[2358:207] Mic blow detected
2010-04-11 …
Run Code Online (Sandbox Code Playgroud)

iphone microphone

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