Tôi đang cố gắng chuẩn bị nhiều tìm kiếm trong thực thể CoreData của mình Công thức. Có những thông số mà tôi muốn chuẩn bị tìm nạp.Nhiều NSPredicate
Công thức thuộc tính:
@property (nonatomic, retain) NSNumber * difficulty;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * code; //like identifier
@property (nonatomic, retain) NSNumber * prepTime;
Thành phần là một thực thể riêng biệt với danh sách các thành phần.
Tham thực thể chứa ingredientCode, recipeCode, đếm.
getArrayOfJoinDataWithIngredients lấy về tham gia thực thể và trả NSArray của mã công thức nấu ăn, trong đó có một số thành phần đầu vào.
Đây là mã của tôi:
- (IBAction)callRecipeFetch:(id)sender
{
NSString *predicateString = @"";
NSArray *codes = [[NSArray alloc] init]; codes = nil;
if ([paramController.ingredientsForSearchArray count] > 0) {
NSMutableArray *ingredientsArray = [[NSMutableArray alloc] init];
for (Ingredients *ingredient in paramController.ingredientsForSearchArray) {
[ingredientsArray addObject:ingredient.code];
}
MainTabController *mainTabController = [[MainTabController alloc] init];
codes = [mainTabController getArrayOfJoinDataWithIngredients:ingredientsArray];
NSString *ingrSet = [NSString stringWithFormat:@"(code IN %@)", codes];
predicateString = [predicateString stringByAppendingString:ingrSet];
}
NSString *diff;
if ([predicateString isEqualToString:@""]) {
diff = [NSString stringWithFormat:@"(difficulty <= %d)", paramController.diff.selectedSegmentIndex + 1];
}
else diff = [NSString stringWithFormat:@" AND (difficulty <= %d)", paramController.diff.selectedSegmentIndex + 1];
predicateString = [predicateString stringByAppendingString:diff];
NSString *timeString = [NSString stringWithFormat:@" AND (%d =< prepTime) AND (prepTime <= %d)", paramController.rangeSlider.leftValue, paramController.rangeSlider.rightValue];
predicateString = [predicateString stringByAppendingString:timeString];
if (paramController.categoryCode) {
NSString *categoryString = [NSString stringWithFormat:@" AND (inCategory = %@)", paramController.categoryCode];
predicateString = [predicateString stringByAppendingString:categoryString];
}
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateString];
[resultController findRecipesWithPredicate:predicate];
}
Các predicateString đầy đủ là @"(code IN (\n 1,\n 3\n)) AND (difficulty <= 5) AND (0 =< prepTime) AND (prepTime <= 28800) AND (inCategory = 12)"
Bây giờ tôi có một lỗi trong ngữ phần (mã TRÊN% @) khi tôi chuẩn bị NSPredicate với mã:
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateString];
L ERI:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(code IN (
1,
3
)) AND (difficulty <= 5) AND (0 =< prepTime) AND (prepTime <= 28800) AND (inCategory = 12)"'
Cách đặt chính xác vị từ bằng toán tử IN. Cảm ơn tất cả lời khuyên.
@Romowski hey dude đã cập nhật câu trả lời của tôi và đặt ví dụ – Joshua
Cảm ơn! Nó hoạt động !!! – Romowski
Không có vấn đề gì.vui vì nó đã giúp :) – Joshua