小编And*_*rew的帖子

在objective-c中避免使用异步代码嵌套块

我有一系列需要在Objective-C代码中发生的事件.假设我有6件事 - thingA,thingB,thingC,thingD,thingE和thingF.thingB和thingD返回BOOL.如果thingB为NO,则不需要调用thingC.如果thingD为NO,则不需要调用thingE.

- (void)doThings:(void(^)())completion {
    [self thingA: ^{
        [self thingB: ^(BOOL success) {
            if (success) {
                [self thingC: ^{
                    [self thingD: ^(BOOL success) {
                        if (thingD) {
                            [self thingE: ^{
                                [self thingF];
                                completion();
                            }];
                            return;
                        }

                        [self thingF];
                        completion();
                    }];
                }];
                return;
            }

            [self thingD: ^(BOOL success) {
                if (success) {
                    [self thingE: ^{
                        [self thingF];
                        completion();
                    }];
                    return;
                }

                [self thingF];
                completion();
            }];
        }];
    }];
}
Run Code Online (Sandbox Code Playgroud)

这很快就会变得笨拙.您可以采取具有不同结果但返回循环的事物,并将它们转换为新方法,如下所示:

- (void)doThings:(void(^)())completion {
    [self thingA: ^{
        [self attemptThingB: ^{
            [self attemptThingD: …
Run Code Online (Sandbox Code Playgroud)

asynchronous objective-c ios objective-c-blocks

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

UICollectionView为大规模集合视图中的每个部分调用高度

我有一个UICollectionView,使用UICollectionViewFlowLayout作为其布局.它由核心数据查询的结果数组支持,并且在那里有10000项样本数据,以测试它在这种情况下的性能.每个项目都有自己的部分,允许我将标题附加到顶部,未来版本中的某些项目将需要其部分中的其他单元格,因此这是一个很好的设置.

我实现了以下UICollectionViewFlowDelegate和UICollectionViewDataSource函数:

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
Run Code Online (Sandbox Code Playgroud)

我的collectionview的设置如下所示:

let collectionViewLayout = UICollectionViewFlowLayout()

self.conversationCollectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionViewLayout)
Run Code Online (Sandbox Code Playgroud)

然后我运行应用程序,并在最初加载应用程序时,并 …

objective-c ios uicollectionview uicollectionviewlayout swift

5
推荐指数
0
解决办法
1937
查看次数

给定私钥和消息,不确定如何生成ECDSA签名

我正在遵循Apple关于编写CloudKit Web服务请求的指南。我遇到的麻烦是“身份验证Web服务请求”下的步骤2:

  1. 用您的私钥计算此消息的ECDSA签名。

在此之前,我生成了一个.pem文件证书,在文本编辑器中打开该文件时会显示我的私钥,因此我也使用字符串格式。

我还遵循了生成消息所指内容的步骤,现在将其作为字符串。

因此,假设我有一个私钥(或.pem文件,如果需要)和一条消息作为字符串,那么从理论上讲,我应该很容易获得使用私钥计算的消息的ECDSA签名。但是,这就是我努力的地方。我在网上发现的图书馆似乎采用了更为复杂的方法,其中的移动部件不同,没有引用.pem文件,也没有谈论生成新的公共/私有密钥。

此步骤的任何帮助将不胜感激。

ruby ruby-on-rails ecdsa cloudkit cloudkit-web-services

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

在等待上一次执行完成时循环通过块

我有一个代码块,它循环遍历一个数组并在其上执行块代码.目前它看起来像这样:

for (NSString *myString in myArray) {

    [self doSomethingToString:myString WithCompletion:^(BOOL completion) {
        string = [NSString stringByAppendingString:@"Test"];
    }];

}
Run Code Online (Sandbox Code Playgroud)

我想在开始下一次迭代之前等待上一次迭代完成.我怎样才能像这样循环一些块代码?

block objective-c nsstring nsarray ios

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

didUpdateLocations未被调用

我将我的对象设置为locationManager的委托,并调用didChangeAuthorizationStatus方法,它执行此操作:

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == CLAuthorizationStatus.AuthorizedWhenInUse {
        self.locationManager.startUpdatingLocation()
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有这个方法,在这之后永远不会被调用:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if locations.count == 0 {
        return
    }

    //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

有什么想法可能没有被调用?我认为被解除分配的对象是一个选项,但是当它达到authorizationStatus方法时它也会被释放.

xcode objective-c cllocationmanager ios swift

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

调用服务器到服务器CloudKit Web服务时的授权错误

我正在尝试实施与CloudKit Web服务的一些基本集成,遵循Apple的身份验证请求指南.我已经按照一些帮助,这个这个问题,就是如何正确授权的请求,并且似乎是正确的以下所有步骤,但我仍然得到401 AUTHENTICATION_FAILED苹果错误.

我定位的端点是一个POST端点,用于在给定记录名称的情况下检索记录.

我在我的代码中添加了注释,以显示我在不同阶段获得的输出,并且我使用了替代证书,因此我没有提供我的正版私钥:

def self.signature(parameters, date, image_id)
    #date: 2016-08-14T14:32:20Z

    #parameters: {"records":[{"recordName":"7DBC4FAD-D18C-476A-89FB-14A515098F34"}]}

    encoded_parameters = Digest::SHA256.base64digest(parameters)

    #encoded_parameters: 6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ=

    url_subpath = CloudKit.url_subpath

    #url_subpath: /database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup

    message = date + ':' + encoded_parameters + ':' + url_subpath

    #message: 2016-08-14T14:23:35Z:6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ=:/database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup

    private_key = OpenSSL::PKey.read(File.read('altkey.pem'))

    signature = private_key.dsa_sign_asn1(OpenSSL::Digest::SHA256.digest(message))

    #signature: -? WX?xfc???????,????v?3+Xt!?$R?_Y?×*?,?3??Z-\#????h

    encoded_signature = Base64.strict_encode64(signature)

    #encoded_signature: MEUCIFdYlHhmrxoIY8KW1tT6yZT17bYsP8ia09WTdpEzK1h0AiEA0yRSh39fWYHDlyqJLNgzhr9aLVwj2cWtkse3aA0tGZI=

    return encoded_signature
end

def self.headers(parameters, image_id)
    date = Time.now.utc.iso8601

    signature = self.signature(parameters, date, image_id)

    headers = {
        'X-Apple-CloudKit-Request-KeyID' => CloudKit.key_id, …
Run Code Online (Sandbox Code Playgroud)

ruby openssl ruby-on-rails cloudkit cloudkit-web-services

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

我无法让 cocoapods 下载正确的提交

这是我要下载的提交:

https://github.com/MegaBits/MagicalRecord/commit/c72306f862250fe4db4be343fc98a105cac98c6c

在我的 podfile 中,我已经尝试了一切。我什至尝试过在该提交之后进行提交,更改它的 podspec。它根本不会安装该提交。

我的播客文件:

source 'https://github.com/CocoaPods/Specs.git'
pod 'MagicalRecord', :podspec => 'https://raw.githubusercontent.com/MegaBits/MagicalRecord/develop/MagicalRecord.podspec'
Run Code Online (Sandbox Code Playgroud)

我对此完全没有想法。我需要在该文件中放入什么内容才能下载该项目的提交?

git xcode ios cocoapods

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

SceneKit节点不会改变场景根节点的位置

我正在使用带有ARKit的SceneKit,现在有一个简单的应用程序,我点击屏幕,它为我的场景添加了一个ARAnchor和一个SCNNode.

在某些时候,我会想要移动整个场景,所以我尝试改变sceneView.scene.rootNode.position.x += 10来测试它.如果我在任何特定节点上调用它,该节点确实会正确移动.但是调用它rootNode,没有任何反应,我希望每个子节点(场景中的每个节点)都随之移动.

为什么我的其他节点没有正确移动,我能做些什么来解决这个问题?或者我在考虑这个错误?

ios scenekit scnnode arkit aranchor

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

UILabel和UITextView换行符不匹配

我有一个UILabel和一个UITextView,我的意图是使它们都显示相同的文本,并且外观相同。我现在对此有一些疑问。我已经在Swift游乐场建立了一个演示:

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let label = UILabel()
        label.frame = CGRect(x: 100, y: 100, width: 247, height: 39)
        label.numberOfLines = 0
        label.font = UIFont.systemFont(ofSize: 16)
        label.text = "I’m on my way back to London today"
        label.textColor = .black
        label.backgroundColor = .red
        label.lineBreakMode = .byWordWrapping
        view.addSubview(label)

        let textView = UITextView()
        textView.frame = CGRect(x: 100, y: 200, width: 247, height: 39)
        textView.font = label.font
        textView.text …
Run Code Online (Sandbox Code Playgroud)

uitextview uilabel ios

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

如何使用Flann匹配之间的关系来确定合理的单应性?

我有一张全景图像,以及在该全景图像中看到的较小的建筑物图像.我想要做的是识别那个较小图像中的建筑物是否在该全景图像中,以及这两个图像是如何对齐的.

对于第一个示例,我使用的是全景图像的裁剪版本,因此像素是相同的.

import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import math

# Load images
cwImage = cv2.imread('cw1.jpg',0)
panImage = cv2.imread('pan1.jpg',0)

# Prepare for SURF image analysis
surf = cv2.xfeatures2d.SURF_create(4000)

# Find keypoints and point descriptors for both images
cwKeypoints, cwDescriptors = surf.detectAndCompute(cwImage, None)
panKeypoints, panDescriptors = surf.detectAndCompute(panImage, None)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

然后我使用OpenCV的FlannBasedMatcher来查找两个图像之间的良好匹配:

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)

# Find matches between the descriptors
matches = flann.knnMatch(cwDescriptors, panDescriptors, …
Run Code Online (Sandbox Code Playgroud)

opencv image homography flann flannbasedmatcher

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