14496


[カスタムキーボードエクステンションからファイルが読み込めない](https://ja.stackoverflow.com/questions/14476/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84)  
を参考にして，App GroupのID登録をして、「App Groups」をオンにして登録し、

[code]

    containerURL 
    
[/code]

のパスをprintコマンドで取得してDBをそこに放り込みました。 しかし、

[code]

    Initialization of immutable value 'filePath' was never used; consider replacing with assignment to '_' or removing it 
    
[/code]

というものと、

[code]

    stringByAppendingPathComponent' is unavailable: Use stringByAppendingPathComponent on NSString instead. 
    
[/code]

が

[code]

    let filePath = containerURL?.filePathURL?.path?.stringByAppendingPathComponent("test.realm") 
    
[/code]

に対して出てしまいます。

[code]

    import UIKit
    import RealmSwift
    import Foundation
    
    class dic: Object {
        dynamic var ID = 0
        dynamic var yomi = ""
        dynamic var emoji = ""
        dynamic var date = NSDate(timeIntervalSince1970: 1)
    
        override static func primaryKey() -> String? {
            return "ID"
        }
    }
    
    class KeyboardViewController: UIInputViewController {
    
        @IBOutlet var nextKeyboardButton: UIButton!
        var button11: UIButton!
        var button12: UIButton!
        var fFastBoot = true
        var fPri = CGFloat(20)
        var ifontSize = 18.0
        var RPath = ""
    
        // Portrait表示におけるキーボードの高さ
        private var portraitHeight: CGFloat = 190.0
        private var portraitWidth: CGFloat!
    
        // Landscape表示におけるキーボードの高さ
        private var landscapeHeight: CGFloat = 100.0
        private var landscapeWidth: CGFloat!
    
        override func updateViewConstraints() {
            super.updateViewConstraints()
    
        }
    
        var realmPath: String {
            let containerURL = NSFileManager().containerURLForSecurityApplicationGroupIdentifier("group.AppGroupKeybora")
            let filePath = containerURL?.filePathURL?.path?.stringByAppendingPathComponent("test.realm")
    
            return filePath!
        }
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let pas = realmPath
            print(pas)
    
            // Perform custom UI setup here
    
            ・・・
    
            let inputText = "か"
            let realm = try! Realm()
            let results = realm.objects(dic)
                .filter("yomi BEGINSWITH %@", inputText)
                .sorted("date", ascending: false)
    
            for result in results {
                print(result)
            }
        }
    ・・・
    
[/code]


CC BY-SA 3.0
2015-08-16T21:12:32.193
14495
2015-08-17T23:42:22.033
2017-04-13T12:52:38.920
-1
10845
question
ios swift
'stringByAppendingPathComponent' is unavailable


エラーメッセージの通りで、

[code]

    stringByAppendingPathComponent' is unavailable: Use stringByAppendingPathComponent on NSString instead.
    
[/code]

`stringByAppendingPathComponent(_:)`は`NSString`のメソッドなので、`String`にはありません。  
`stringByAppendingPathComponent(_:)`メソッドを使うには、オブジェクトを`NSString`にキャストする必要があります。

なのですが、`NSURL`にもパスを追加するメソッド`URLByAppendingPathComponent(_:)`があるので、それを使って、`NSURL`のままパスを組み立てて、最後にNSStringにするのがいいと思います。

[code]

    var realmPath: String {
        let containerURL = NSFileManager().containerURLForSecurityApplicationGroupIdentifier("group.AppGroupKeybora")
        return containerURL!.URLByAppendingPathComponent("test.realm").path!
    }
    
[/code]


CC BY-SA 3.0
2015-08-16T22:04:59.637
14496
2015-08-16T22:14:22.577
2015-08-16T22:14:22.577
10845
5519
14495
answer