0

例外エラーをスローしているカテゴリ内で関数を呼び出しています:

-[NSPathStore2 countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1f5572b0

このブロック内でエラーがスローされています。

NSArray *shindys = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSError *error = nil;
__weak UIManagedDocument *shindyDatabase = self.shindyDatabase;
dispatch_queue_t downloadQueue = dispatch_queue_create("Shindy Fethcer", nil);
dispatch_async(downloadQueue, ^{
    for (NSDictionary *shindyInfo in shindys) {
        [Shindy shindyWithShindyDBInfo:shindyInfo inManagedObjectContext:shindyDatabase.managedObjectContext];
        [shindyInfo setValue:self.detailView.text forKey:@"details"];
        NSLog(@"This is getting performed.");
    }
});

事前割り当てはNSDictionary役に立ちませんでした。

4

2 に答える 2

2

'shindys' は NSArray ではありません。-objectAtIndex: の呼び出しを停止すると、そうなります。

于 2012-12-22T04:40:35.690 に答える
1

内部では、for(element in container)ループがcountByEnumeratingWithState:objects:count:メッセージを使用してコンテナーの要素を列挙します。

このNSPathStore2クラスは、NSStringシステムがファイルシステム パスとして知られている文字列に使用するサブクラスです。

例外メッセージはNSPathStore2、メッセージがサポートされていないことを示していcountByEnumeratingWithState:objects:count:ます。

NSString(およびNSPathStore2サブクラス) はオブジェクト コンテナーではないため、これは理にかなっています。

このNSSearchPathForDirectoriesInDomains関数はNSArray(ループで使用できるオブジェクト コンテナーである) を返しますが、 を使用しfor/inて配列の最初の要素 (NSPathStore2インスタンス) を選択していobjectAtIndex:ます。したがって、 として宣言shindysしてもNSArray、実際には に設定していNSPathStore2ます。

を呼び出している方法NSSearchPathForDirectoriesInDomainsでは、常に 1 要素の配列が返されるため、使用して最初の要素を選択するという考えはobjectAtIndex:問題ありません。要素は 1 つしかないため、すべての要素を列挙しようとする理由はありません。

さらに、あなたのブロックでは、辞書であることを期待してに送信setValue:forKey:しています。しかし、配列であったとしても、それは文字列の配列になります。それが返されるからです。また、文字列には で設定できるプロパティがありません。shindyInfoshindyInfoshindysNSSearchPathForDirectoriesInDomainssetValue:forKey:

このコードはめちゃくちゃです。何をしようとしているのかは明確ではありませんが、の目的を理解していないと思いますNSSearchPathForDirectoriesInDomains

于 2012-12-22T04:44:58.867 に答える