2017-08-15 11 views
0

特定の条件が満たされていないと実行できないカスタムXcodeエディタ拡張機能を作成しました。Xcodeでカスタムエディタ拡張のエラーテキストが表示されない

具体的には、行の並べ替えコマンドであり、複数の選択がある場合、または選択範囲が2行より少ない場合は実行を拒否します。

LocalizedErrorにも準拠するエラーを定義するために、エラー準拠の列挙型を定義しました。 completionHandler :)私は適切なエラーのいずれかで完了ハンドラを呼び出す方法:

... 
if invocation.buffer.selections.count > 1 
{ 
    completionHandler(CommandError.tooManySelections) 
    return 
} 
... 

私は、エラーのテキスト(「あまりにも多くの選択を期待していが、私と(実行中

enum CommandError: Error, LocalizedError 
{ 
    case notEnoughLines 
    case tooManySelections 

    public var errorDescription: String? 
    { 
    switch self 
    { 
    case .notEnoughLines:  return NSLocalizedString("Not enough lines to sort", comment: "notEnoughLines") 
    case .tooManySelections: return NSLocalizedString("Too many selections", comment: "tooManySelections")   
    } 
    } 
} 

")が表示されます。代わりに、エラーは次のように表示されます。

操作を完了できませんでした。 (Ext01.SortLinesCommand.CommandErrorエラー1.)

これは間違っているのですか、これはXcodeKitまたはXcodeの問題ですか?

答えて

0

私はlinkedInのプロフィールでXcode拡張の記事を作成しました。ここでの問題は、エラーがプロトコルであり、NSErrorがオブジェクトであることです。補完ハンドラにErrorプロトコルを渡す必要はありませんが、そこにNSErrorインスタンスを渡す必要があります。あまりにも前に混乱していた。

あなたはこの

var userInfo: [AnyHashable : Any] = [ 
     NSLocalizedDescriptionKey : NSLocalizedString(
      "Finally! This works!", 
      value: "Finally! This works!", 
      comment: "" 
     ), 
     NSLocalizedFailureReasonErrorKey : NSLocalizedString(
      "Finally! This works!", 
      value: "Finally! This works!", 
      comment: "" 
     ) 
    ] 

let error = NSError(
    domain: "", 
    code: 666, 
    userInfo: userInfo 
) 
    // And pass it to completion like this, it will work 
    completionHandler(error) 

ようNSErrorインスタンスを作成する場合、この問題のさらなる理解のために私の記事をチェックしてください:

https://www.linkedin.com/pulse/xcode-extension-defining-enum-variables-swift-moreerror-bucher/

あなただけのエラーに関する興味があれば、ではCmd + Fをこの記事のキーワード:

I haven't seen any extension with passing error

+0

ありがとうございます。私はXcodeを起動して次回に試してみます(現時点では他のものに取り組んでいます)。 –

関連する問題