【问题标题】:Contacts sorting similar to viber iOS App联系人排序类似于 viber iOS App
【发布时间】:2014-10-19 18:22:07
【问题描述】:

我正在尝试过滤我的联系人,类似于 Viber iOS 应用程序。通过切换分段控制分为“全部”和“仅限应用程序用户”两类来列出联系人。

在获取联系人列表时,如果联系人数量较多,则需要更多时间。

目前我正在手动运行一个 for 循环来获取联系人,如果有其他替代方法,请告诉我。

`-(void)usersList:(NSMutableDictionary *) dictUsrs    
{
NSDictionary *contactDetails;
arrContactsUser = [[NSMutableArray alloc] init];
[arrContactsUser removeAllObjects];
NSArray *sorted = [[sectionForRecievedContacts allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    //             NSOrderedAscending, NSOrderedSame, NSOrderedDescending
    BOOL isPunct1 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]] || [[NSCharacterSet symbolCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]] || [[NSCharacterSet illegalCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]] ||
    [[NSCharacterSet whitespaceCharacterSet] characterIsMember:[(NSString*)obj1 characterAtIndex:0]];
    BOOL isPunct2 = [[NSCharacterSet punctuationCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]] || [[NSCharacterSet symbolCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]] || [[NSCharacterSet illegalCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]]||
    [[NSCharacterSet whitespaceCharacterSet] characterIsMember:[(NSString*)obj2 characterAtIndex:0]];

    if (isPunct1 && !isPunct2)
        return NSOrderedDescending;
    else if (!isPunct1 && isPunct2)
        return NSOrderedAscending;

    return [(NSString*)obj1 compare:obj2 options:NSDiacriticInsensitiveSearch|NSCaseInsensitiveSearch];
}];

for (int j=0; j<[[dictUsrs allKeys] count]; j++) {

    for (int i=0; i<[[dictUsrs valueForKey:[sorted objectAtIndex:j]] count]; i++) {

        contactDetails = [[dictUsrs valueForKey:[sorted objectAtIndex:j]] objectAtIndex:i];

        fetchCount++;

        if ([contactDetails objectForKey:@"status"] == nil) {
            NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:j];
                           if (fetchCount < kFetchLimit) {
                                [self startStatusFetcher:contactDetails forIndexPath:path withTableView:tableViewIngIngUsers];
                    NSLog(@"Fetch for Cell For Row at IndexPath");
            }

        }
        if ([contactDetails objectForKey:@"registered"] != nil && [[contactDetails objectForKey:@"registered"] isEqualToString:@"yes"]) {
            [arrContactsUser addObject:contactDetails];

        }

    }

}
   [self.tableViewIngIngUsers reloadData];

} `

【问题讨论】:

    标签: ios objective-c sorting filtering


    【解决方案1】:
        `dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    
    });`
    

    调度队列给了我临时解决方案,以避免这种长时间的提取延迟。

    【讨论】:

      【解决方案2】:

      在另一个线程中获取您的联系人信息,或者只是在应用程序启动时延迟调用。所以数据可以被缓存,当你想使用它时,只需读取缓存一个即可。

      【讨论】:

      • 我已经在使用线程来获取联系人,并且我使用调度队列解决了这个问题,但我也无法获得类似 viber 应用程序的 UI
      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2023-02-02
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多