小编Mat*_*oal的帖子

ALAssets组枚举:如何检查完成?

ALAssets使用分离的线程来管理枚举,我必须知道枚举何时终止.

组枚举的块原型是:

typedef void (^ALAssetsLibraryGroupsEnumerationResultsBlock)(ALAssetsGroup *group, BOOL *stop);

我该如何添加完成块?

iphone objective-c ios

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

NSNotification VS KVO

我觉得我不完全理解KVO和NSNotification之间的区别......它们似乎是如此相似......你能举一些例子说明何时最好使用一种方法而另一种方法?

我不是说Bind和IB,但我的意思是在我的代码中使用NSNotificationCenter或KVO以编程方式添加Observer

[self.preferenceController addObserver:self 
                                    forKeyPath:@"color" 
                                       options:NSKeyValueObservingOptionOld 
                                       context:@"Color-change"
];
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c key-value-observing nsnotificationcenter swift

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

沙盒,登录项目和启动应用程序

试图使我的应用程序与沙盒一起使用我遇到了这个问题:

我需要将我的应用程序添加到登录项,所以我按照以下步骤操作:

  • 创建一个HelperApp.app(带is agent = YES)在open exec这段代码:

    NSString *appPath = @"/Applications/MyNewApp.app";
    [[NSWorkspace sharedWorkspace] launchApplication:appPath];
    [NSApp terminate:nil];
    
    Run Code Online (Sandbox Code Playgroud)

    这个应用程序是沙盒.

  • 我在MyNewApp.app包中添加了一个带有子路径Contents/Library/LoginItems和目标的复制构建阶段wrapper

    显然,MyNewApp.app也是沙箱

  • MyNewApp.app我注册SMLoginItemSetEnabled捆ID为HelperApp.app

现在一切正常但是......当MyNewApp.app尝试启动MyNewApp.app时出现错误:

LSOpenFromURLSpec() returned -10827 for application /Applications/MyNewApp.app path (null).
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用HelperApp.app来启动一个非沙盒(即Steam.app)应用程序,它就像一个魅力!

有没有其他方式来启动应用程序?可能NSWorkSpace使用沙盒上下文中不允许的功能.你有什么建议?

cocoa sandbox objective-c

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

更改NSView子视图顺序

我正在使用提供不同句柄的自定义控件.我想确保所选的句柄具有Z-index grater,然后其他句柄处理.

有没有办法交换视图订单?我找到了这个功能,sortSubviewsUsingFunction:context:但我无法理解这是否是正确的解决方案.

cocoa objective-c nsview subviews

6
推荐指数
3
解决办法
8911
查看次数

在OSX上模拟UILabel行为

我想模拟OSX应用程序中的多行UILabel行为.绘制多行标签,您可以指定行数,并且换行系统工作得很好!

这是我想要实现的一个例子.

这是我想用UILabel显示的字符串

Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Run Code Online (Sandbox Code Playgroud)

我可以选择带有尾部截断的3行标签获取:

 Lorem Ipsum is simply 
 dummy text of the 
 printing and typeset...
Run Code Online (Sandbox Code Playgroud)

或者带有尾部截断的2行标签我得到:

 Lorem Ipsum is simply 
 dummy text of the pri... 
Run Code Online (Sandbox Code Playgroud)

我想我需要一个低级API来以这种方式绘制字符串.

目前我找到3种不同的方式来绘制文本,我想了解哪个是完成此任务的正确方法.


可可文

NSTextView和NSTextField:它似乎是一个太高的级别...我无法重现这种效果(NSTextView不允许我选择行数,并且换行似乎将多行NSTextView转换为单个行NSTextView).

编辑 我想从字符串中获取帧,然后从帧中获取行并仅使用所需的行重建帧.你怎么看?


核心文本

我可以很好地控制使用框架的文本绘图,但是......我找不到一种方法来定义要显示的行数以及如何截断字符串.


NSLayoutManager

它似乎也是一个很好的解决方案,但我不知道如何重现UILabel多线效果.

你有什么建议可以帮助我完成这个棘手的任务吗?

cocoa objective-c uilabel core-text ios

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

Swift和SecTrust

我试图将我在Apple文档中找到的代码转换为快速代码时遇到了一些麻烦.确切地说,它是关于TSL和证书的东西......

https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html

这是Objective-C中的原始代码

SecTrustResultType secresult = kSecTrustResultInvalid;
if (SecTrustEvaluate(trust, &secresult) != errSecSuccess) 
     return;
}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试......

var secresult:SecTrustResultType = kSecTrustResultInvalid // ERROR 1 
if (SecTrustEvaluate(trust, &secresult) != errSecSuccess) { // ERROR 2
   return;
}
Run Code Online (Sandbox Code Playgroud)

错误1是:

'Int' is not convertible to 'SecTrustResultType'
Run Code Online (Sandbox Code Playgroud)

错误2是:

 Could not find an overload for '!=' that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)

现在,我看到它SecTrustResultType是一个UInt32并且kSecTrustResultInvalidInt......但是这个标题是由Apple定义的所以我认为它应该是正确的:P

typealias SecTrustResultType = UInt32
var kSecTrustResultInvalid: Int { get }
Run Code Online (Sandbox Code Playgroud)

关于第二个错误我真的不知道如何管理它,因为函数SecTrustEvaluate返回一个OSStatus(这是一个别名UInt32),errSecSuccess …

ios swift

6
推荐指数
2
解决办法
3776
查看次数

在 Testflight 上发布两个不同版本

我的情况是,我们想要测试该应用程序的 2 个不同版本:\n版本 1.0.0将在 App Store 上发布,目前正在测试中。\n版本 2.0.0仅在测试中。

\n\n

让\xe2\x80\x99s 说我已经在 Testflight 上发布了版本 1.0.0 - 版本号1。

\n\n

如果我想发布版本 1.0.0 的新版本,\xe2\x80\x99 不会成为问题\xe2\x80\xa6 我可以增加版本号并保持版本号不变(如版本 1.0.0 - Build 2)。

\n\n

现在,让\xe2\x80\x99s 说我也在 testflight 上上传版本 2.0.0 - build 3。\n是不是从现在开始我就不能上传低于2.0.0的其他版本了

\n\n

如果我上传了版本2.0.0但 Apple 在 App Store 审核过程中拒绝了我当前的1.0.0版本\xe2\x80\xa6 我无法向 Apple 发送另一个版本1.0.0,唯一的方法是是上传一个新的版本,将版本号增加到2.0.0或更高版本吗?

\n\n

我有说错什么吗?

\n

ios testflight

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

从NSAttributedString获取属性词典

如何获取NSAttributedString的属性?

我想使用enumerateAttributesInRange:NSMakeRange(0, str.length)然后保存NSMutableDictionaries中的每个属性,但我想知道是否存在更好的方法.

编辑------我的问题是我有一个NSAttributedString,我想在它的属性上使用这个函数...

CTFramesetterSuggestFrameSizeWithConstraints(framesetter,range, __ATTRIBUTES__, size , NULL);
Run Code Online (Sandbox Code Playgroud)

objective-c

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

设置包含Pods的项目,将在CocoaPods上发布

我正处于这种情况......我正在开始一个新的SDK,我想通过CocoaPods发布,SDK本身需要一些Pods(AFNetworking)我想知道哪个是设置项目的最佳方式,因为我需要尝试编写示例项目时的SDK.

我的第一次尝试是从pod lib create命令开始的.我遵循了所有指令,最终得到了一个完整的工作区,非常棒!现在我怎么包括AFNetworking?我必须使用以下方法将其作为依赖项添加到mySDK.podspec文件中:s.dependency 'AFNetworking', '~> 3.0'这样我的SDK的用户也可以将它包含在库中,非常棒.但是如何将它包含在我当前的项目中以便在开发期间使用它?

我看到,创建的CocoaPods"示例"文件夹下我有一个Podfile,但它仅包含的例子和测试目标......我想这里包括SDK目标,但它似乎并没有这样的.

source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!

target 'MYSDK_Example', :exclusive => true do
  pod 'MYSDK', :path => '../'
end

target 'MYSDK_Tests', :exclusive => true do
  pod 'MYSDK', :path => '../'

  pod 'Specta'
  pod 'Expecta'
end
Run Code Online (Sandbox Code Playgroud)

我试图包含下一个配置并再次启动pod install ...

target 'MYSDK', :exclusive => true do
    pod 'AFNetworking', '~> 3.0'
end
Run Code Online (Sandbox Code Playgroud)

我得到一个通用的可怕错误,无论如何它听起来不是很好的解决方案.

这是lib create命令创建的结构,我应该添加一个新的Podfile来包含我开发库所需的库?

 MyLib
  ??? _Pods.xcproject
  ??? Example
  ?   ??? MyLib
  ?   ??? MyLib.xcodeproj …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods

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

Swift 结合订阅、正确的流程和架构选择

让我们说:

• 我的应用程序是 Socket 服务器的客户端。

• 我可以自由编写 Socket 客户端实现以适应 Combine我喜欢

我已经实现了 2 个解决方案,一个使用CurrentValueSubject(非常简单),另一个使用自定义订阅和我不确定的自定义发布者。我真的不知道哪个是桥接我用来处理服务器消息的代码的最佳方法。

这是我的代码:

为了模拟套接字服务器,我创建了一个假的SocketServerManager,每秒钟生成一些事件N

protocol SocketServerManagerDelegate{
    func newEvent(event:String)
}

class SocketServerManager {

    let timing: Double
    var timerHandler:Timer? = nil
    var delegates:[SocketServerManagerDelegate] = []

    init(timing:Double){
        self.timing = timing
    }

    func start(){
        // Just start a timer that calls generateEvent to simulate some events
        timerHandler = Timer.scheduledTimer(withTimeInterval: timing, repeats: true){
            [weak self] _ in
            self?.generateEvent()
        }
        timerHandler?.fire()
    }


    private func generateEvent(){
        let events = …
Run Code Online (Sandbox Code Playgroud)

swift combine

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