小编sli*_*c07的帖子

核心数据NSPredicate使用in子句获取实体关系

我希望能够使用IN子句搜索实体的关系.我有以下设置: 在此输入图像描述

我想发送一系列昵称,找到与这些昵称相关的所有人.

//array of names to find
let nameArray: [String] = ["Tom", "Tommy", "Thomas"] 

// find all Persons who have a nickname associated with that person           
let predicate = NSPredicate(format: "ANY Person.nickName in %@",nameArray)
var fetch = NSFetchRequest(entityName: "Person")
fetch.predicate = predicate
var fetchError : NSError? = nil

// executes fetch
let results = context?.executeFetchRequest(fetch, error: &fetchError)
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,我收到以下错误:

'NSInvalidArgumentException',原因:'谓词的未实现的SQL生成:(任何Person.nickName IN {"Tom","Tommy","Thomas"})'

我在这做错了什么?如果我删除谓词搜索,它会返回所有结果,但是一旦我添加了这一行,一切都会中断.

core-data nspredicate nsfetchrequest ios swift

8
推荐指数
1
解决办法
8545
查看次数

如何知道NSURLSessionDataTasks的for循环何时完成

我正在调用一个方法,它将枚举数组,创建一个NSURL,并调用一个返回JSON的NSURLSessionDataTask.循环通常运行大约10次,但可以根据日期而变化.

在开始处理数据之前,我需要等待for循环和所有NSURLSessionDataTasks完成.

我很难搞清楚所有工作何时完成.任何人都可以推荐任何方法或逻辑来了解整个方法何时完成(对于循环和数据任务)?

-(void)findStationsByRoute{
for (NSString *stopID in self.allRoutes) {
    NSString *urlString =[NSString stringWithFormat:@"http://truetime.csta.com/developer/api/v1/stopsbyroute?route=%@", stopID];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request
                                                 completionHandler:^(NSData *data,
                                                                     NSURLResponse *response,
                                                                     NSError *error) {
                                                     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
                                                     if(httpResponse.statusCode == 200){
                                                         NSError *jsonError = [[NSError alloc]init];
                                                         NSDictionary *stopLocationDictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&jsonError];
                                                         NSArray *stopDirectionArray = [stopLocationDictionary objectForKey:@"direction"];
                                                         for (NSDictionary * _stopDictionary in stopDirectionArray) {
                                                             NSArray *stop =   [_stopDictionary objectForKey:@"stop"];
                                                             [self.arrayOfStops addObject:stop];

                                                         }
                                                     }

                                                 }];

    [task …
Run Code Online (Sandbox Code Playgroud)

loops objective-c objective-c-blocks ios7 nsurlsession

4
推荐指数
1
解决办法
1713
查看次数