2017-04-07 9 views
3

私は電子メールのテキストファイルをアプリケーションに読み込んで読み込むための読み込みシステムを作っています。私は非常に迅速で、アプリのプログラミングは(主にバックエンドを行う)、私は下のコードで問題を抱えています。これはおそらく非常に非効率的で、おそらくこれを行うより良い方法がありますが、現在、私はに、ビューコントローラに送る変数をURLに割り当てる他のコードを持っています(notifications/rootviewcontrollerでまだ動作していません) 。ただし、このコードを実行すると、ファイルの内容ではなく結果が( "matrixFile4197009889-26.text"、Unicode(UTF-8))になります。私は何をすべきか? 「ベビー語」で説明してください。テキストファイルの内容の問題

私のビューコントローラコード:

let delegate = UIApplication.shared.delegate as! AppDelegate 
    if delegate.importFileIndicator == true { 
     let filemgr = FileManager.default 
     let docsDirURL = try! filemgr.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
     let inboxURL = docsDirURL.appendingPathComponent("Inbox") 
     print(inboxURL) 
     do{ 
      var directoryContents = try FileManager.default.contentsOfDirectory(at: inboxURL, includingPropertiesForKeys: nil, options: []) 
      var fileSearchBoolCounter = false 
      var fileSearchCounter = 0 
      var fileURL: URL 
      while fileSearchBoolCounter == false { 
       if (String(describing: directoryContents[fileSearchCounter].lastPathComponent).range(of: String(describing: NSURL(string: delegate.urlString)!.lastPathComponent!)) != nil) { 
        fileURL = directoryContents[fileSearchCounter] 
        fileSearchBoolCounter = true 
        print(fileURL) 
        let path = inboxURL.appendingPathComponent((NSURL(string: delegate.urlString)?.lastPathComponent!)!) 

        encryptedMessageField.text = try String(contentsOfFile: String(describing: path), encoding: String.Encoding.utf8) 
       }else{ 
        print(directoryContents[fileSearchCounter]) 
        fileSearchCounter += 1 
        print(NSURL(string: delegate.urlString)!.lastPathComponent!) 
       } 
      } 

      delegate.importFileIndicator = false 
      fileSearchBoolCounter = false 
      fileSearchCounter = 0 
     }catch let error as NSError{ 
      print(error) 
     } 

    } 

私AppDelegateコード:

var importFileIndicator = false 
var urlString = "" 

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    urlString = String(describing: url) 
    print(urlString) 
    importFileIndicator = true 
    return true 
} 
+0

1.。これはファイルURLです。そのままURLで作業してください。 2. 'urlString'に空の接頭辞が付いている場合はどうなりますか?すべての文字列が一致します。 3。'urlString'はすでに' String'です。 'urlStringVar'変数のポイントは何ですか? – rmaddy

+0

@rmaddyこれらのすべてを修正しましたが、私はまだ同じ結果を得ています –

+0

最新のコードと問題を表示するために質問を更新してください。 – rmaddy

答えて

0

私はすでにいくつかの部分との良好なたと思うが、私は全体的にあまりにもそれらを含めるつもりですプロセス。

1.システムは、あなたがInfo.plist自体を設定する必要があり、あなたのアプリがTXTファイルを受信する用意があることを知っている、または最も簡単な方法があるようにするに

ファイルTXTを開くことは、あなたのアプリが利用できるようにしますTARGETS/"Info tab"/"Document Types section"経由で設定するには:

enter image description here

この時点では、あなたのアプリが、他の外部アプリケーションからのTXTファイルを処理するために利用できるようになります。あなたがメールに添付されたTXTファイルを開くしようとしているときに、あなたはリストにあなたのアプリが利用できるはずです。

enter image description here

2.

の着信TXTファイルを受信するためのアプリを準備します

サポートされているファイルタイプを処理するには、AppDelegateに既に記載したapplication:openURL:options:メソッドを実装する必要があります。ここでは、ファイルパスをURLとして受け取ります。これは、後で処理するためにViewControllerに簡単に送信することができます。

(lldb) po url 
▿ file:///private/var/mobile/Containers/Data/Application/42D78E58-C7EC-4F3B-9100-B731AF7A4E45/Documents/Inbox/sample.txt 

3. TXTあなたはまた、適切なString初期化子を使用してString内のファイルの内容を保存することができます。ここ

ファイルハンドル:このURLは次のようになります必要があります。

String(contentsOf: url, encoding: String.Encoding.utf8) 

、その後、あなたのViewControllerにそのStringを渡すことができます。

だからあなたAppDelegateであなたのapplication:openURL:options:この(実際のビューコントローラの階層に依存します)のようなものに見える必要があります:あなたはurl` `に` absoluteString`を使用したくない

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

    do { 
     let contentString = try String(contentsOf: url, encoding: .utf8) 

     if let window = self.window, let viewController = window.rootViewController as? ViewController { 
      viewController.displayText(text: contentString) 
     // here you pass the actual content as String to your custom ViewController which implements a displayText: function that receives a string 
     } 
    } 
    catch { 
     // contents could not be loaded 
    } 

    return true 
} 
関連する問題