2011-12-05 5 views
2

Iは、以下のコードでNSIndexPathオブジェクトの行またはセクションプロパティにアクセスしようとすると、私はSIGABRTを参照してください代わりhttp://developer.apple.com/library/mac/#samplecode/SourceView/Listings/BaseNode_m.html#//apple_ref/doc/uid/DTS10004441-BaseNode_m-DontLinkElementID_6セクションへの行へのnsindexpathアクセスはSIGABRTを引き起こしますか? IOSの5.0ターゲティング

path = [NSIndexPath indexPathWithIndex:0]; 

結果が残っている:

NSIndexPath* path = [[NSIndexPath alloc] initWithIndex:0]; 
int row = path.row; //SIGABRT 
int section = path.section;//SIGABRT 

この例ではindexPathWithIndexを使用することを提案一貫している。なぜ誰かがこれが起こるかもしれないの説明を持っていますか? iOS 5.0でNSIndexPathを操作できないのですか?

ありがとうございました。

答えて

3

は、私は考えることができる唯一のことは、あなたがあなたのフレームワークの1つとしてUIKit.frameworkを持っていることを確認することですindexPathForRow:inSection:

NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; 
+0

ありがとうございました。そして、申し訳ありません:私はクラス参照を介して初めてそのメモを忘れました。なぜ彼らはクラスメソッドの下にこのメソッドをリストしないか? – stephen

+0

これらのメソッドは、NSIndexPathクラスではなく、NSIndexPath上のカテゴリとして定義されているためです。このドキュメントは、http://developer.apple.com/library/ios/#documentation/uikit/reference/NSIndexPath_UIKitAdditions/Reference/Reference.html –

2

を使用したインデックスパスを作成してみてください。これを行うには、ターゲット上の「ビルド段階」の下にある「ライブラリでバイナリをリンクする」セクションのプラスボタンを押します。また、インデックスパスにアクセスしようとしているファイルにNSIndexPath.hをインポートしてください。

これまでにこの問題に遭遇しましたが、これで解決しました。これは、NSIndexPathはCocoaとCocoaTouchの間で普遍的ですが、Cocoaのバージョンはrowsectionのプロパティを持たないためです。

すでにUIKit.frameworkをお持ちの場合は、[NSIndexPath indexPathWithIndex:index]の代わりに[NSIndexPath indexPathForRow:row inSection:section]をお試しください。

0

私は問題がindexPathWithIndex:1ノードのインデックスパスを作成すると思います。 initWithIndex:と同じです。セクションと行のプロパティは、NSIndexPathクラスのUITableViewカテゴリから取得されます。表ビューに渡される索引パスには、セクションと行を指定する2つの索引が必要です(コードを実行するときに表示されるエラー・メッセージに従って)ため、1ノード・インデックス・パスは無効です。次のコードは、2つのインデックスとインデックスパスを作成し、NSInternalInconsistencyExceptionを投げずに実行します:

NSUInteger x[] = {0 , 0}; 
NSIndexPath *path = [[NSIndexPath alloc] initWithIndexes: x length: 2]; 
int row = [path row]; 
int section = [path section]; 
row = path.row; 
section = path.section; 

は、あなたが「のiOS 5.0でNSIndexPathを操作」によって何を意味するか、このですか?

+0

こんにちは。ご意見をいただきありがとうございます。私ははっきりしていませんでした。私はNSIndexPathインスタンスデータメンバーでの操作を意味しました。 'オブジェクトでの操作'はC++ではかなり一般的です。これはobj-cの標準的な規則ではありませんか? – stephen

+1

"オブジェクト上での操作"は、Objective-Cのコンテキストで私が聞いた式ではありません。 Objective-Cに固有の式は、「オブジェクトにメッセージを送る」ことです。これは、オブジェクトのインスタンスメソッドの1つを呼び出すことを意味します。 –