0

次のコードを使用して、エンティティを Core Data に挿入または更新 (存在する場合) しようとしています。

- (void)insertFriendWithDictionary:(NSDictionary *)friendInfo {

    NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:@"Friend"];

    NSString *atributeName = @"identifier";
    NSString *valueName = [[friendInfo objectForKey:@"id"] stringFromMD5];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",atributeName,valueName ];
    req.predicate = predicate;

    req.fetchLimit = 1;
    NSError *requestError = nil;
    NSArray *tmp = [self.managedObjectContext executeFetchRequest:req error:&requestError];

    if (tmp && tmp.count >0) {
        Friend *friend = [tmp objectAtIndex:0];
        friend.name = [friendInfo objectForKey:@"name"];
        friend.identifier = [NSString stringWithFormat:@"%@",[[friendInfo objectForKey:@"id"] stringFromMD5]];
        [self saveContext];
        return;
    }   

    Friend *friend = 
    [NSEntityDescription insertNewObjectForEntityForName:@"Friend"
                                  inManagedObjectContext:self.managedObjectContext];
    friend.name = [friendInfo objectForKey:@"name"];
    friend.identifier = [friendInfo objectForKey:@"id"];
    friend.noOfMessagesReceived = [NSNumber numberWithInt:0];
    friend.email = @"";
    friend.selected = [NSNumber numberWithBool:NO];
    friend.frooiFriend = [NSNumber numberWithBool:NO];
}

しかし、コードを 2 回目に実行すると、述語はどの結果とも一致しません。NSPredicate に問題があると思います。

Friend 用に生成されたコードは次のとおりです。

@interface Friend : NSManagedObject

@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSNumber * frooiFriend;
@property (nonatomic, retain) NSString * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * noOfMessagesReceived;
@property (nonatomic, retain) NSData * profileImage;
@property (nonatomic, retain) NSNumber * selected;
@property (nonatomic, retain) NSNumber * frooliMessagesSentTo;

@end

私は何か間違ったことをしていますか?

ありがとう

4

2 に答える 2

3

[friendInfo objectForKey:@"id"]に等しい[[friendInfo objectForKey:@"id"] stringFromMD5]ですか?

そうでない場合: 新しい友達を設定しているので、これはあなたの問題ですがfriend.identifier = [friendInfo objectForKey:@"id"];、友達を検索するための述語は を使用し[[friendInfo objectForKey:@"id"] stringFromMD5]ます。

于 2012-07-20T14:48:06.600 に答える
0

次の述語を使用してみてください。

[NSPredicate predicateWithFormat:@"%@ MATCHES[cd] '.*%@.*'",atributeName,valueName ];

パフォーマンスには最適ではありませんが、機能します。後でパフォーマンスを向上させることができます。

于 2012-07-20T14:52:34.107 に答える