Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从数组中删除项(从API中删除带有JSON的Restkit项目)_Ios_Arrays_Json_Restkit - Fatal编程技术网

Ios 从数组中删除项(从API中删除带有JSON的Restkit项目)

Ios 从数组中删除项(从API中删除带有JSON的Restkit项目),ios,arrays,json,restkit,Ios,Arrays,Json,Restkit,我有一个叶的数组,我想删除数组中的一些对象 数组中大约有50个对象,而我只希望数组中有大约10个对象;数组中需要的10个对象通过数组中的50个对象混合在一起 我在我的项目中使用RestKit,并将leafs放入表视图中 ViewController.m @property (strong, nonatomic) NSArray *springs; @property (strong, nonatomic) NSMutableArray *leafs; @end @synthesize tab

我有一个
叶的数组
,我想删除数组中的一些对象

数组中大约有50个对象,而我只希望数组中有大约10个对象;数组中需要的10个对象通过数组中的50个对象混合在一起

我在我的项目中使用RestKit,并将
leafs
放入表视图中

ViewController.m

@property (strong, nonatomic) NSArray *springs;
@property (strong, nonatomic) NSMutableArray *leafs;

@end

@synthesize tableView=_tableView;
@synthesize springs;
@synthesize leafs;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self configureRestKit];
    [self loadLeafs];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)configureRestKit {
    // initialize AFNetworking HTTPClient
    NSURL *baseURL = [NSURL URLWithString:@"https://api.e.com"];
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

    // initialize RestKit
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];

    // setup object mappings
    RKObjectMapping *springMapping = [RKObjectMapping mappingForClass:[Spring class]];
    [springMapping addAttributeMappingsFromArray:@[@"name"]];

    RKObjectMapping *leafMapping = [RKObjectMapping mappingForClass:[Leaf class]];
    [leafMapping addAttributeMappingsFromArray:@[@"abbreviation", @"shortName", @"id"]];

    [springMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"leafs" toKeyPath:@"leafs" withMapping:leafMapping]];

// Wain, this is where I'm getting that error:
// "property discardsinvalidobjectsoninsert not found on object of type RKObjectMapping"
springMapping.discardsInvalidObjectsOnInsert = YES;

    // register mappings with the provider using a response descriptor
    RKResponseDescriptor *responseDescriptor =
    [RKResponseDescriptor responseDescriptorWithMapping:springMapping
                                                 method:RKRequestMethodGET
                                            pathPattern:nil
                                                keyPath:@"springs"
                                            statusCodes:[NSIndexSet indexSetWithIndex:200]];
    [objectManager addResponseDescriptor:responseDescriptor];
}

- (void)loadLeafs {
    NSString *apikey = @kCLIENTKEY;

    NSDictionary *queryParams = @{@"apikey" : apikey,};

    [[RKObjectManager sharedManager] getObjectsAtPath:@"v1/springs/"
                                           parameters:queryParams
                                              success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                                  springs = mappingResult.array;
                                                  [self.tableView reloadData];


                                              }
                                              failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                                  NSLog(@"No springs?': %@", error);
                                              }];
}

#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return springs.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    Spring *spring = [springs objectAtIndex:section];
    return spring.leafs.count;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    Spring *spring = [springs objectAtIndex:section];
    return spring.name;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"standardCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    Spring *spring = [spring objectAtIndex:indexPath.section];
    Leaf *leaf = [spring.leafs objectAtIndex:indexPath.row];
    cell.textLabel.text = leaf.shortName;

    return cell;
}
春天

@property (nonatomic) NSString *name;
@property (nonatomic) NSNumber *id;
@property (nonatomic) NSArray *leafs;

@property (nonatomic) NSString *name;
@property (nonatomic) NSString *abbreviation;
@property (nonatomic) NSString *shortName;
@property (nonatomic) NSNumber *id;
每个人,我在我的春天添加了这个。h

@property (nonatomic, assign) BOOL discardsInvalidObjectsOnInsert;
每个人,我在我的春天添加了这种东西。m

- (BOOL)validateName:(id *)ioValue error:(NSError **)outError {

    if([(NSString *)*ioValue  isEqualToString:@"cricket"]){

        NSLog(@"old name: %@, new name: %@", self.name, *ioValue);

// Wain: set the names to nil for the objects you don't want
ioValue = nil;

        return NO;

// Wain: should I keep this line?
        self.discardsInvalidObjectsOnInsert = YES;

        }

        else{
            return YES;
        }

}
- (void)loadLeafs {

    NSString *apikey = @kCLIENTKEY;

    NSDictionary *queryParams = @{@"apikey" : apikey,};

        [[RKObjectManager sharedManager] getObjectsAtPath:@"v1/springs/"
                                               parameters:queryParams
                                                  success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                                      springs = mappingResult.array;
                                                      [self.tableView reloadData];


                                                  }
                                                  failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                                      NSLog(@"No springs?': %@", error);
                                                  }];
        // Wain: filter (using a predicate) the mapping array (name != nil)
        NSPredicate *bPredicate = [NSPredicate predicateWithValue:NO];
        self.filteredArray = [self.sports filteredArrayUsingPredicate:bPredicate];
    }
我在我的ViewController.m中添加了这个

- (BOOL)validateName:(id *)ioValue error:(NSError **)outError {

    if([(NSString *)*ioValue  isEqualToString:@"cricket"]){

        NSLog(@"old name: %@, new name: %@", self.name, *ioValue);

// Wain: set the names to nil for the objects you don't want
ioValue = nil;

        return NO;

// Wain: should I keep this line?
        self.discardsInvalidObjectsOnInsert = YES;

        }

        else{
            return YES;
        }

}
- (void)loadLeafs {

    NSString *apikey = @kCLIENTKEY;

    NSDictionary *queryParams = @{@"apikey" : apikey,};

        [[RKObjectManager sharedManager] getObjectsAtPath:@"v1/springs/"
                                               parameters:queryParams
                                                  success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                                      springs = mappingResult.array;
                                                      [self.tableView reloadData];


                                                  }
                                                  failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                                      NSLog(@"No springs?': %@", error);
                                                  }];
        // Wain: filter (using a predicate) the mapping array (name != nil)
        NSPredicate *bPredicate = [NSPredicate predicateWithValue:NO];
        self.filteredArray = [self.sports filteredArrayUsingPredicate:bPredicate];
    }
成功块

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"name != nil"];
                                                  springs = [mappingResult.array filteredArrayUsingPredicate:filterPredicate];

                                                  // You need to loop over the springs after you filter them and then filter the leafs of each spring
                                                  for (Spring *spring in springs) {
                                                      for (Leaf *leaf in spring.leafs){
                                                          NSPredicate *filterPredicate2 = [NSPredicate predicateWithFormat:@"shortName != nil"];
                                                          leafs = [spring.leafs filteredArrayUsingPredicate:filterPredicate2];
                                                      }
                                                  }

                                                  [self.tableView reloadData];

下面是一个简单的方法来满足您的要求:

for (Leaf *leaf in leafs) {
    if (![leaf.shortName isEqualToString:@"aaa"] && ![leaf.shortName isEqualToString:@"bbb"] && ![leaf.shortName isEqualToString:@"ccc"] && ![leaf.shortName isEqualToString:@"ddd"]) {
        [leafs removeObject:leaf];
    }
}

这基本上是在叶对象数组中循环,如果遇到一个叶对象的shortName属性不是这四个字符串,则该对象将被删除。

一个简单的方法来完成您的请求,如下所示:

for (Leaf *leaf in leafs) {
    if (![leaf.shortName isEqualToString:@"aaa"] && ![leaf.shortName isEqualToString:@"bbb"] && ![leaf.shortName isEqualToString:@"ccc"] && ![leaf.shortName isEqualToString:@"ddd"]) {
        [leafs removeObject:leaf];
    }
}

这基本上是在叶对象数组中循环,如果遇到一个叶对象的shortName属性不是这四个字符串,则该对象将被删除。

一个简单的方法来完成您的请求,如下所示:

for (Leaf *leaf in leafs) {
    if (![leaf.shortName isEqualToString:@"aaa"] && ![leaf.shortName isEqualToString:@"bbb"] && ![leaf.shortName isEqualToString:@"ccc"] && ![leaf.shortName isEqualToString:@"ddd"]) {
        [leafs removeObject:leaf];
    }
}

这基本上是在叶对象数组中循环,如果遇到一个叶对象的shortName属性不是这四个字符串,则该对象将被删除。

一个简单的方法来完成您的请求,如下所示:

for (Leaf *leaf in leafs) {
    if (![leaf.shortName isEqualToString:@"aaa"] && ![leaf.shortName isEqualToString:@"bbb"] && ![leaf.shortName isEqualToString:@"ccc"] && ![leaf.shortName isEqualToString:@"ddd"]) {
        [leafs removeObject:leaf];
    }
}

这基本上是在叶对象数组中循环,如果遇到一个叶对象的shortName属性不是这四个字符串,则该对象将被删除。

如果要在映射过程中过滤掉这些项,请查看使用KVC验证和RestKit


如果您希望设备上的所有项目都可用,并且仅用于显示筛选,请使用谓词筛选阵列。

如果要在映射过程中筛选项目,请查看使用KVC validation with RestKit


如果您希望设备上的所有项目都可用,并且仅用于显示筛选,请使用谓词筛选阵列。

如果要在映射过程中筛选项目,请查看使用KVC validation with RestKit


如果您希望设备上的所有项目都可用,并且仅用于显示筛选,请使用谓词筛选阵列。

如果要在映射过程中筛选项目,请查看使用KVC validation with RestKit



如果您希望设备上的所有项目都可用,并且只进行显示筛选,请使用谓词筛选数组。

创建一个新的NSMutableArray,在数组中循环,将您想要的项目添加到新数组中?您使用什么标准来确定是否要删除叶?@Mike Good question,我也会在我最初的问题中说明这一点。我想指定要包含的
leafs
shortName
s。例如,在
leafs
数组中,我只想要
shortName
s:aaa、bbb、ccc、ddd、eee。这清楚吗?@jrade感谢您的回复!你是否有一个关于如何做到这一点的链接,或者你可以发布一段代码?我也有点理解我需要尝试做什么的一般想法,但具体的实现是我在这里要讨论的问题。创建一个新的NSMutableArray,循环遍历您的数组,将您想要的添加到新数组中?您使用什么标准来确定是否要删除叶子?@Mike问得好,我也会在我最初的问题中说明这一点。我想指定要包含的
leafs
shortName
s。例如,在
leafs
数组中,我只想要
shortName
s:aaa、bbb、ccc、ddd、eee。这清楚吗?@jrade感谢您的回复!你是否有一个关于如何做到这一点的链接,或者你可以发布一段代码?我也有点理解我需要尝试做什么的一般想法,但具体的实现是我在这里要讨论的问题。创建一个新的NSMutableArray,循环遍历您的数组,将您想要的添加到新数组中?您使用什么标准来确定是否要删除叶子?@Mike问得好,我也会在我最初的问题中说明这一点。我想指定要包含的
leafs
shortName
s。例如,在
leafs
数组中,我只想要
shortName
s:aaa、bbb、ccc、ddd、eee。这清楚吗?@jrade感谢您的回复!你是否有一个关于如何做到这一点的链接,或者你可以发布一段代码?我也有点理解我需要尝试做什么的一般想法,但具体的实现是我在这里要讨论的问题。创建一个新的NSMutableArray,循环遍历您的数组,将您想要的添加到新数组中?您使用什么标准来确定是否要删除叶子?@Mike问得好,我也会在我最初的问题中说明这一点。我想指定要包含的
leafs
shortName
s。例如,在
leafs
数组中,我只想要
shortName
s:aaa、bbb、ccc、ddd、eee。这清楚吗?@jrade感谢您的回复!你是否有一个关于如何做到这一点的链接,或者你可以发布一段代码?我也有点理解我需要尝试做什么的一般想法,但是具体的实现是我在这里的不足之处?这是有道理的,我应该把它放在我的ViewController中的什么地方?也许在LoadLeaf中?我对你的代码一无所知,无法给你最好的答案。我在
loadLeafs
中尝试了它,并在上面的问题中发布了我的代码,我尝试了,但它没有删除我要求它删除的任何内容。有什么想法或者更多的细节可以帮助你吗?首先,你不想把for循环放到另一个循环中,在这个循环中你通过sprin循环