小编Rob*_*Rob的帖子

如何在Swift协议中定义可选方法?

在Swift中有可能吗?如果没有,那么有解决方法吗?

ios swift swift-extensions swift-protocols

340
推荐指数
13
解决办法
15万
查看次数

在启动另一个块之前等待直到执行两个异步块

使用GCD时,我们希望等到两个异步块执行完成后再继续执行下一步.最好的方法是什么?

我们尝试了以下方法,但它似乎不起作用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block1
});


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block2
});

// wait until both the block1 and block2 are done before start block3
// how to do that?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block3
});
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch ios objective-c-blocks

182
推荐指数
5
解决办法
11万
查看次数

如何创建日期时间戳并格式化为ISO 8601,RFC 3339,UTC时区?

如何使用ISO 8601RFC 3339的格式标准生成日期时间戳?

目标是一个如下所示的字符串:

"2015-01-01T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)

格式:

  • 年,月,日,如"XXXX-XX-XX"
  • 字母"T"作为分隔符
  • 小时,分钟,秒,毫秒,如"XX:XX:XX.XXX".
  • 字母"Z"作为零偏移的区域指示符,也就是UTC,GMT,Zulu时间.

最佳案例:

  • Swift源代码简单,简洁,直观.
  • 无需使用任何其他框架,子项目,cocoapod,C代码等.

我搜索过StackOverflow,Google,Apple等,并没有找到Swift的答案.

似乎最有前途的类NSDate,NSDateFormatter,NSTimeZone.

相关问答:如何在iOS中获得ISO 8601日期?

这是迄今为止我提出的最好的:

var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
Run Code Online (Sandbox Code Playgroud)

time date iso8601 rfc3339 swift

172
推荐指数
6
解决办法
10万
查看次数

将数据附加到POST NSURLRequest

如何将数据附加到现有数据POST NSURLRequest?我需要添加一个新参数userId=2323.

objective-c nsurlrequest ios

82
推荐指数
5
解决办法
11万
查看次数

导航控制器顶部布局指南不符合自定义过渡

精简版:

当与自定义转换和UINavigationControlleriOS7 结合使用时,我遇到了自动布局顶部布局指南的问题.具体而言,顶级布局指南和文本视图之间的约束不受尊重.有没有人遇到过这个问题?


长版:

我有一个场景明确定义了约束(即顶部,底部,左侧和右侧),呈现如下视图:

对

但是当我在导航控制器上使用自定义转换时,顶部布局指南的顶部约束似乎关闭,它呈现如下,好像顶部布局指南位于屏幕顶部,而不是底部导航控制器:

错误

使用自定义转换时,导航控制器的"顶部布局指南"似乎变得混乱.其余约束正确应用.如果我旋转设备并再次旋转它,一切都会突然正确呈现,所以看起来并不是没有正确定义约束.同样,当我关闭自定义转换时,视图会正确呈现.

话虽如此,当我运行时_autolayoutTrace报告UILayoutGuide对象受到影响AMBIGUOUS LAYOUT:

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)

但是每当我看到它们时,这些布局指南总是被报告为含糊不清,即使我已经确保没有遗漏约束(我已经习惯性地选择视图控制器并选择"为视图控制器添加缺少的约束"或选择全部控制和为他们做同样的事情).

在如何我正是这样做的过渡方面,我指定符合对象UIViewControllerAnimatedTransitioninganimationControllerForOperation方法:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                               fromViewController:(UIViewController*)fromVC
                                                 toViewController:(UIViewController*)toVC
{
    if (operation == UINavigationControllerOperationPush)
        return [[PushAnimator alloc] init];

    return nil;
}
Run Code Online (Sandbox Code Playgroud)

@implementation PushAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
    return 0.5;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    [[transitionContext containerView] addSubview:toViewController.view];
    CGFloat width = fromViewController.view.frame.size.width;

    toViewController.view.transform = CGAffineTransformMakeTranslation(width, 0); …
Run Code Online (Sandbox Code Playgroud)

uinavigationcontroller autolayout ios7 custom-transition

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

使用Objective-C POST多部分/表单数据

所以这个HTML代码为我提交了正确格式的数据.

<form action="https://www.example.com/register.php" method="post" enctype="multipart/form-data">
    Name: <input type="text" name="userName"><BR />
    Email: <input type="text" name="userEmail"><BR />
    Password: <input type="text" name="userPassword"><BR />
    Avatar: <input type="file" name="avatar"><BR />
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

我已经查看过很多关于如何在iOS上进行multipart/form-data POST的文章,但没有一篇真正解释如果有正常的参数以及文件上传怎么办.

你能帮我解决一下在Obj-C中发帖的代码吗?

谢谢!

multipartform-data objective-c http-post http-post-vars

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

如何从Alamofire返回价值

我通过使用swift创建的API进行url调用,如下所示:

class API {

  let apiEndPoint = "endpoint"
  let apiUrl:String!
  let consumerKey:String!
  let consumerSecret:String!

  var returnData = [:]

  init(){
    self.apiUrl = "https://myurl.com/"
    self.consumerKey = "my consumer key"
    self.consumerSecret = "my consumer secret"
  }

  func getOrders() -> NSDictionary{
    return makeCall("orders")
  }

  func makeCall(section:String) -> NSDictionary{

    let params = ["consumer_key":"key", "consumer_secret":"secret"]

    Alamofire.request(.GET, "\(self.apiUrl)/\(self.apiEndPoint + section)", parameters: params)
        .authenticate(user: self.consumerKey, password: self.consumerSecret)
        .responseJSON { (request, response, data, error) -> Void in
            println("error \(request)")
            self.returnData = data! as NSDictionary
    }
    return self.returnData
  }

} …
Run Code Online (Sandbox Code Playgroud)

ios swift alamofire

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

AFNetworking和后台转移

我有点混淆如何利用新的iOS 7 NSURLSession后台传输功能和AFNetworking(版本2和3).

我看到了WWDC 705 - What’s New in Foundation Networking会话,他们展示了应用程序终止甚至崩溃后继续下载的后台下载.

这是使用新的API application:handleEventsForBackgroundURLSession:completionHandler:以及会话的委托最终将获得回调并完成其任务的事实来完成的.

所以我想知道如何使用AFNetworking(如果可能的话)继续在后台下载.

问题是,AFNetworking方便地使用基于块的API来完成所有请求,但如果应用程序终止或崩溃,那些块也会消失.那么我该如何完成任务呢?

或者也许我在这里遗漏了一些东西......

让我解释一下我的意思:

例如,我的应用程序是一个照片消息应用程序,假设我有一个PhotoMessage代表一条消息的对象,并且此对象具有类似的属性

  • state - 描述照片下载的状态.
  • resourcePath - 最终下载的照片文件的路径.

因此,当我从服务器收到新消息时,我创建了一个新PhotoMessage对象,并开始下载其照片资源.

PhotoMessage *newPhotoMsg = [[PhotoMessage alloc] initWithInfoFromServer:info];
newPhotoMsg.state = kStateDownloading;

self.photoDownloadTask = [[BGSessionManager sharedManager] downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *filePath = // some file url
    return filePath;
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    if (!error) {
        // update the PhotoMessage …
Run Code Online (Sandbox Code Playgroud)

objective-c ios afnetworking afnetworking-2

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

我什么时候应该将layer.shouldRasterize设置为YES

我已经通过设置视图的图层属性看到了一些lagyness问题的修复

view.layer.shouldRasterize = YES;
Run Code Online (Sandbox Code Playgroud)

我在使用UICollectionView并准备单元格和设置属性时看到了很大的性能差异.

不确定其含义是什么.

得到解释会很棒.谢谢!

rasterizing uiview ios uicollectionview

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

无法下标类型'[String:Any]'的值,其索引类型为'UIImagePickerController.InfoKey'

我正在使用Apple的Swift iOS教程.这是一个错误,

无法下标类型'[String:Any]'的值,其索引类型为'UIImagePickerController.InfoKey'

他们定义的功能如下.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    // The info dictionary may contain multiple representations of the image. You want to use the original.
    guard let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage else {
        fatalError("Expected a dictionary containing an image, but was provided the following: \(info)")
    }

    // Set photoImageView to display the selected image.
    photoImageView.image = selectedImage

    // Dismiss the picker.
    dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode Version 10.0 beta 3,其中包括Swift …

uiimagepickercontroller ios swift

46
推荐指数
5
解决办法
3万
查看次数