2016-03-14 133 views
1

文件这是我的appDelegate didFinishLaunchingWithOptions(代码)写在迅速

var paths : NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
    var documentsDirectory = paths.objectAtIndex(0) 
    var fileName: String = String(format: "Logger.txt") 
    var logFilePath : NSString = documentsDirectory.stringByAppendingPathComponent(fileName) 
    freopen(logFilePath, "a+", stderr) 

错误我得到是不可能的NSString转换为UnSafepointer。 任何人都可以帮助我,我应该如何实施这个?

回答

0

让铸造;-)

的旅途

您只需要投射NSArray即可获得objectAtIndex()方法

let paths : NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
let documentsDirectory = paths.objectAtIndex(0) 
let fileName = String(format: "Logger.txt") 
let logFilePath = documentsDirectory.stringByAppendingPathComponent(fileName) 
freopen(logFilePath, "a+", stderr) 

额外的好处:用let代替var。

编辑:

一个版本没有的NSArray &的NSString:

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
let documentsDirectory = paths[0] 
let fileName = String(format: "Logger.txt") 
let logFilePath = NSURL(fileURLWithPath: documentsDirectory).URLByAppendingPathComponent(fileName).absoluteString 
freopen(logFilePath, "a+", stderr) 
1

刚从logFilePath删除NSString

var paths : NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
var documentsDirectory = paths.objectAtIndex(0) 
var fileName: String = String(format: "Logger.txt") 
var logFilePath = documentsDirectory.stringByAppendingPathComponent(fileName) 
freopen(logFilePath, "a+", stderr) 

和更安全的方式来做到这将是这样的:

let file = "Logger.txt" 
let text = "A safer way to do this" 

if let directory : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first { 
    let path = directory.stringByAppendingPathComponent(file); 

    print(path) 

    do { 
     try text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding) 
    } 
    catch { 
    } 
}