1

これが私のインターフェースです:

@interface AddRatingViewController ()
    @property (nonatomic, copy) NSMutableArray *categoryFromDb;
@end

次のコードはviewDidLoadメソッドにあります。

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] initWithEntityName:@"Categories"];
[fetchRequest2 setPredicate:pre];

self.categoryFromDb = [[managedObjectContext executeFetchRequest:fetchRequest2 error:nil] mutableCopy];



if ([self.categoryFromDb count] > 0) {
    NSString *strUrl1 = [self.categoryFromDb valueForKey:@"rank1Img"];

}

NSLogstrUrl1 の値は次のとおりです。

(
"assets-library://asset/asset.JPG?id=98E14854-7DA2-4B1F-9B0B-EEDCF3390DF3&ext=JPG"
)

ただし、次のようにする必要があります。

assets-library://asset/asset.JPG?id=98E14854-7DA2-4B1F-9B0B-EEDCF3390DF3&ext=JPG

文字列値の代わりにstrUrl1が取得されているようです。NSArray今私の質問は、どうすればこれ("を文字列から削除できますか、または配列の代わりに文字列を取得するにはどうすればよいですか? または他の提案。

4

6 に答える 6

1

categoryFromDb の各要素は、クラス「Categories」に属します。次のことを試してみてください:-

NSString *strUrl1 = [((Categories *)[self.categoryFromDb lastObject]) valueForKey:@"rank1Img"];

Categories クラスがあると仮定します。

于 2013-08-26T13:46:06.943 に答える
1

executeFetchRequest:error:NSArray(お気づきのように)を返します。各要素の結果から構成される を[NSArray valueForKey:]返します。1 つだけが必要な場合は、から、または の結果から 1 つの要素を選択する必要があります。通常、これを使用します (要素が 1 つしかないと思われる場合)。NSArrayrank1ImgcategoryFromDbvalueForKey:lastObject


objectAtIndex:0編集:いくつかの回答は、配列の唯一の要素を抽出するために使用することを示唆していることに注意してください。私はお勧めしlastObjectます。あなたが間違っていて、配列が空の場合、 はlastObjectを返しnilます。objectAtIndex:0例外をスローし、プログラムをクラッシュさせる可能性があります。

于 2013-08-26T13:43:23.583 に答える
0

この場合、次のように最初のオブジェクトをフェッチします。

NSString *strUrl1 = [[self.categoryFromDb valueForKey:@"rank1Img"] objectAtIndex:0];
于 2013-08-26T13:43:20.440 に答える
0

これは、次の方法で実行できます。

NSString * str = [[array valueForKey:@"rank1img"] componentsJoinedByString:@""];
于 2013-08-26T13:43:20.787 に答える
0

フェッチ要求が実行されると、結果が NSArray の形式で返されます。次に、別の配列を作成するキー値コーディングを使用します。このように NSArray 内に Person オブジェクトがある場合、

NSArray *array = [NSArray arrayWithObjects: person1, person2, person3,  nil];

たとえば、モデル Person にプロパティがある場合、valueForKey:@"name" は、それらの各モデルの名前を含む新しい配列を生成します。

NSArray *names = array[@"name"];

したがって、それらを結合したい場合は、次のようにします。

NSString *combinedName = [ array[@"name"] componentsJoinedByString:@""];
于 2013-08-26T13:45:16.940 に答える
0

で valueForKey を呼び出すとNSArray、すべてのアイテムが反復処理され、各メンバーからそのキーの値が取得されます。まったく同じではありませんがmap、他の言語と同じように考えることができます。あなたの配列は明らかに1要素の長さなので、コードをそのままにして、に追加objectAtIndex:0NSString *strUrl1 = [self.categoryFromDb valueForKey:@"rank1Img"];て最初の要素を取得することができます。配列に複数の要素がある場合に処理が異なる場合は、長さを確認してから適切に処理する必要があります。

于 2013-08-26T13:44:11.977 に答える