- (IBAction)login:(UIButton *)sender {
sender.enabled = NO;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"_login": @"bar", @"_pass" : @"123"};
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
sender.enabled = YES;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
sender.enabled = YES;
}];
}
...
Customers *customers;
NSMutableDictionary *dictionaryCustomers;
NSArray *sortedKeys = nil;
...
for (NSDictionary *dictionary in [responseData objectForKey:@"data_list"]) {
customers = [[Customers alloc] init];
for (NSString *key in [dictionary allKeys]) {
if ([customers respondsToSelector:NSSelectorFromString(key)]) {
[customers setValue:[dictionary objectForKey:key] forKey:key];
}
}
//например по имени индексируем
NSString *fisrtSymbol = [[customers.name substringFromIndex:1] uppercaseString];
if ([dictionaryCustomers.allKeys containsObject:fisrtSymbol] == NO)
{
dictionaryCustomers[fisrtSymbol] = [NSMutableArray new];
}
[dictionaryCustomers[fisrtSymbol] addObject:customers];
}
sortedKeys = [dictionaryCustomers.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
return [obj1 compare:obj2];
}]
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return dictionaryCustomers.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [dictionaryCustomers[sortedKeys[section]] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
Customers *c = [dictionaryCustomers[sortedKeys[indexPath.section]] obkectAtIndex:indexPath.row];
...
return cell;
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return sortedKeys;
}
@interface MyViewController ()
@property NSMutableDictionary *dictionaryCustomers; // исходные которые были заполненны из responseData
@property NSArray *sortedKeys; // исходные которые были заполненны из responseData
@property NSDictionary *currentDictionaryCustomers;
@property NSArray *currentSortedKeys;
@end
@implemented MyViewController
- (void)parseResponse:(id)responseData
{
// парсим ответ
self.dictionaryCustomers = ...
self.sortedKeys = ...
self.currentDictionaryCustomers = self.dictionaryCustomers;
self.currentSortedKeys = self.sortedKeys;
}
- (void)filterCustomers:(NSString *)sFilter
{
NSMutableDictionary *result = [NSMutableDictionary new];
for (NSString *key in [self.dictionaryCustomers allKeys])
{
for (Customers *customer in self.dictionaryCustomers[key])
{
if (<customer.company содержит sFilter>)
{
if ([result.allKeys containsObject:key] == NO) result[key] = [NSmutableArray new];
[result[key] addObject:customer];
}
}
}
self.currentDictionaryCustomers = result;
self.currentSortedKeys = [result.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
return [obj1 compare:obj2];
}]
[self.tableView reloadData];
}
// тут заполняем tableView из self.currentDictionaryCustomers и self.currentSortedKeys
@end
#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.users.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.users[section].comments.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0)
{
UITableViewCell *cell = [[self tableViewAllCheckins] dequeueReusableCellWithIdentifier:@"UserCell"];
NSDictionary *userInfo = self.users[indexPath.section];
// заполнение ячейки User-а
return cell;
}
else
{
CommentViewCell *commentCell = [[self tableViewAllCheckins] dequeueReusableCellWithIdentifier:@"CommentCell"];
UserInfo *userInfo = self.users[indexPath.section];
CommentInfo *comment = userInfo.comments[indexPath.row - 1]; // так как нулевая ячейка в секции принадлежит пользователю, а первая ячейка принадлежит нулевому комментарию, то надо сделать минус 1
// заполнение ячейки Comment-а
return commentCell;
}
}
git remote add remote_tags <url>
git fetch --tags remote_tags
git remote del remote_tags
//как-то так должен выглядеть MyImagesView.m файл
@interface MyImagesView ()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, assign) int currentImage;
@property (nonatomic, assign) int totalImages;
@end
@implementation
/*
* этот метод надо вызывать в таймере. обязательно в Main Thread
*/
- (void)showNextImage
{
assert([NSThread isMainThread] == YES);
self.currentImage ++;
if (self.currentImage == self.totalImages)
{
// что бы отображать картинки циклически
self.currentImage = 0;
}
UIImageView *newImageView = [[UIImageView alloc] initWithFrame:self.bounds];
newImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"image_name%i.png", self.currentImage]];
[self.imageView removeFromSuperview]; // убираем прирыдущий кадр из view-хи (затираем сильную ссылку номер 1)
self.imageView = nil; // убираем сильную ссылку номер два (тут UIImageView должна выгрузиться из памяти, а с ней и UIImage)
[self addSubview:newImageView]; // закидываем новый кадр во view-ху (создаём сильную ссылку номер 1)
self.imageView = newImageView; // сохраняем ссылку на новый кадр что бы иметь в следующем вызове метода showNextImage ссылку на предыдущий кадр (создаём сильную ссылку номер 2)
}
@end
newImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"image_name%i.png", self.currentImage]];
на:NSString *imageName = [NSString stringWithFormat:@"image_name%i", self.currentImage];
newImageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]];