相关疑难解决方法(0)

在Swift中使用dispatch_once单例模型

我正在尝试找出适合在Swift中使用的单例模型.到目前为止,我已经能够得到一个非线程安全模型:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
        }

        if !Static.instance {
            Static.instance = TPScopeManager()
        }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

在Static结构中包装单例实例应允许单个实例在没有复杂命名方案的情况下不与单例实例发生冲突,并且它应该使事情变得相当私密.显然,这个模型不是线程安全的,所以我尝试将dispatch_once添加到整个事情中:

class var sharedInstance: TPScopeManager {
    get {
        struct Static {
            static var instance: TPScopeManager? = nil
            static var token: dispatch_once_t = 0
        }

        dispatch_once(Static.token) { Static.instance = TPScopeManager() }

        return Static.instance!
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译器错误dispatch_once:

无法将表达式的类型'Void'转换为'()'类型

我已经尝试了几种不同的语法变体,但它们似乎都有相同的结果:

dispatch_once(Static.token, { Static.instance = TPScopeManager() })
Run Code Online (Sandbox Code Playgroud)

dispatch_once使用Swift 的正确用法是什么?我最初认为问题出在块中,因为dispatch_once错误消息,但我看的越多,我认为可能是获得() …

singleton dispatch swift

563
推荐指数
10
解决办法
13万
查看次数

在Swift中实现CLLocationManagerDelegate方法

我一直试图让它工作一段时间,我来这里问 - 如何在Swift中使用CLLocationManagerDelegate方法?我把它放在班上的顶端:

var locationManager = CLLocationManager()
Run Code Online (Sandbox Code Playgroud)

我把以下内容放入我的viewDidLoad方法中:

locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
Run Code Online (Sandbox Code Playgroud)

我尝试使用这些委托方法无济于事:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
    locationReceived = true
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    locationReceived = false
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在函数前使用@optional,但Xcode会抛出编译器错误.有任何想法吗?

cllocationmanager swift ios8

27
推荐指数
3
解决办法
4万
查看次数

在iOS 6上使用mapkit usertrackingwithheading模式时遇到问题

我想我可能已经在iOS4的mapkit API中发现了一个错误,但由于我仍然认为自己是一个新手,我想我会在这里查看是否有人可以指出我可能做错了什么.

我有一个应用程序,我已经工作了几个星期,在其中使用mapview并利用MKUserTrackingButton来切换跟踪模式.在iOS 5上它工作正常但是从升级到6它有奇怪的行为.当你将mapview放入跟踪带有标题的用户之后的跟踪模式时,如果你相对静止,它会很好,但是当你开始在汽车中移动时,每次回到常规跟踪模式时它会以航向模式退出轨道.经过许多令人沮丧的时间试图找出它后,我决定使用最小的mapview制作一个新的简单应用程序并跟踪,看看它是否只是我的编码或可能的错误.新的应用程序做同样的事情.我发布了以下所有代码.希望有人可以帮我告诉我,如果我做错了.

这是app delegate标题

//  iTrackerAppDelegate.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "TrackerViewController.h"

@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) IBOutlet UIWindow *window;

@end
Run Code Online (Sandbox Code Playgroud)

这是app委托实现

    //
    //  iTrackerAppDelegate.m
    //  iTracker
    //
    //  Created by Victor Hudson on 9/22/12.
    //  Copyright (c) 2012 Victor Hudson. All rights reserved.
    //

    #import "iTrackerAppDelegate.h"

    @implementation iTrackerAppDelegate

    @synthesize window = _window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary …
Run Code Online (Sandbox Code Playgroud)

user-tracking mapkit ios6 ios6-maps

17
推荐指数
1
解决办法
1662
查看次数

飞行模式开启时,CLLocationManager如何获取位置

我的应用程序使用CLLocationManager从设备获取位置更新。

我以为,当设备处于飞行模式时,我不会获得位置更新。但是我愿意。

我之所以认为这是因为Apple表示“飞行模式”会关闭Wifi,蜂窝,蓝牙和GPS。请参阅:http//support.apple.com/kb/ht1355

那么,如何以似乎合理的坐标获取位置更新?

iphone core-location cllocationmanager ios

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