NSStringの代わりにNSArrayを返すコアデータ

core-data ios nsarray
NSStringの代わりにNSArrayを返すコアデータ

何らかの理由で、NSString型の属性はすべて、ArticleオブジェクトのNSArrayとして返されています。 それらを取得するための私の関数は次のとおりです。

- (NSArray *)getSavedArticles
{
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    NSError *error = nil;
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    NSSortDescriptor *dateSort = [NSSortDescriptor sortDescriptorWithKey:@"last_opened" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:dateSort]];
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
    return fetchedObjects;
}

これらのNSManagedObjectModelを作成しておらず、代わりにKVOを使用してアクセスしています。

//self.data has the array returned from getSavedArticles
NSManagedObject *object = [self.data objectAtIndex:indexPath.row];
NSString *path  = [object valueForKey:@"path"];
NSString* id      = [object valueForKey:@"id"];

変数ペインでこれを見ると、「パス」と「ID」に「(__NSArrayI *)…​ 変数はCFStringではありません。これらのいずれかの説明を印刷すると、配列を印刷するときに使用される括弧も印刷されます。

私はこれがソート記述子に起因するのではないかと思っていますか? これらのオブジェクトに入力されるデータが正しく入力されていること、およびすべてをバックアップするために使用しているSQLiteデータベースに文字列が表示されていることを再確認しました。

シミュレーターでアプリを再インストールし、リセットしてみました。 NSStringの代わりにNSArrayを取得します。

ここで何が起こっているのか本当に分かりません。 任意の助けがいただければ幸いです。

*編集:*何か他に面白いことが見つかりました。 記事が保存されたかどうかを確認するために別のチェックを行いますが、今回は記事のパスのNSArrayを取得しません。

- (NSString *)hasArticleSaved:(NSString *)id
{
    NSString *path = nil;
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @"id", id]];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    NSError *error = nil;
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects.count > 0) {
       NSManagedObject *savedArticle = [fetchedObjects objectAtIndex:0];
        path = [savedArticle valueForKey:@"path"];
    }
    return path;
}

今、私は本当に混乱しています。 受講者ですか?

  5  0


ベストアンサー

あなたの問題はここにあります:

[self.data objectForKey:indexPath.row]

…​because objectForKey: is looking for a string key name e.g. “path”
または「id」。 整数を指定すると、エラーまたはランダムリターンが生成されます。

代わりに、あなたは欲しい:

[self.data objectAtIndex:indexPath.row]
  1. 指定されたインデックスで管理対象オブジェクトを返します
    アレイ。

0


私は問題を見つけました。 self.dataが配列の配列になるようにテーブルのデータ構造を変更しました…​実際にデータに間違ってアクセスしているときにNSArrayを取得しているように見えたオブジェクトは1つだけでした。 `[[self.data objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];`を実行する必要がありました。

0


タイトルとURLをコピーしました