Форум программистов, компьютерный форум CyberForum.ru

Контроллер для свайпа и вынесение логики - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Не освобождается память после unwind segue http://www.cyberforum.ru/objective-c/thread1688582.html
Здравствуйте! Объясните, пожалуйста, как правильно решить следующую проблему: Есть тестовое приложение с двумя экранами UINavigationController --> Экран 1 (UIViewController) --(show)--> Экран 2 (UITableViewController) На экране 1 всего одна кнопка (для перехода на экран 2), т.е. при запуске приложения памяти используется по-минимуму. На экране 2 - таблица из 10 строк (создаются с помощью...
Objective-C Литература C++ и Objective-C Здравствуйте. Книг по C++ гораздо больше, чем по Objective-C, т.к. его область применения шире, но вот интересно, почему по Objective-C нет книг типа "Эффективное использование Objective-C", в которых давались бы советы по улучшению качества кода? Это связано с тем, что Objective-C так хорош, что некачественный код на нем невозможно написать в принципе, или с тем, что C++ значительно сложнее и... http://www.cyberforum.ru/objective-c/thread1684629.html
Objective-C Autorotate на контротном viewcontroller
Всем привет, стоит такая задача дать возможность юзера повернуть экран autorotate - но только на одном viewcontroollere. Поиск особо ничего не дал, нахожу только старые коды которые для ios 789 - не катят. Мож у кого есть код, поделитесь) спасибо
Переменные NSStream для Socket's events Objective-C
Хочу использовать NSInputStream/NSOutputStream для работы с соединением, для этого в событии сокета kCFSocketAccetCallBack пытаюсь создать и зациклить прослушивание входных/выходных потоков: void AcceptCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *info) { CFReadStreamRef readStream = NULL; CFWriteStreamRef writeStream = NULL; ...
Objective-C Автоперевод строки http://www.cyberforum.ru/objective-c/thread1678982.html
Всем привет! Вопрос наверное простой, но я ответа не смог найти. Вопрос: Xcode, есть текстовое поле, которое заполняется текстом (запись выполняемых действий). Не могу найти где поставить "галочку", чтобы при заполнении этого текстового поля показывалось не начало текста, а его конец, т.е. чтобы текст выравнивался по нижнему краю. Добавлено через 1 час 50 минут т.е. нужно чтоб текст по...
Objective-C Pdf reader Добрый день всем! Стоит задача, написать pdf читалку на ios , но с возможностью звонить из приложения. Т.е если на странице pdf файла указан номер телефона, чтоб была возможность позвонить. Может кто сталкивался, с чего начать, может есть какие библиотеки? Буду очень признателен за любую помощь. подробнее

Показать сообщение отдельно
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102

Контроллер для свайпа и вынесение логики - Objective-C

23.03.2016, 14:05. Просмотров 616. Ответов 9
Метки (Все метки)

Пытался устроиться на позицию джуниора в одну компанию. Дали тестовое задание. Я его выполнил и отправил. Мне ответили, что в моем решении "Проблемы с тем как логика вынесена и контролером для свайпа."
Подскажите, что конкретно неправильно/некорректно в моём решении?

Задача была поставлена так:
Сделать приложение, которое по нажатию кнопки "fetch" выгружает с сервера JSON с записями через гет-запрос и заливает их в tableview. При выборе cell'a и нажатии на кнопку "details" выгружает подробную инфу о записи и показывает ее на новом экране.

Вот код:
главный вьюконтроллер
Objective-C
1
2
3
4
5
6
#import <UIKit/UIKit.h>
#import "infoDelegate.h"
 
@interface ViewController : UIViewController <infoDelegate>
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#import "ViewController.h"
#import "INInfoViewController.h"
#import "INTools.h"
 
@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
 
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIButton *fetchButton;
@property (weak, nonatomic) IBOutlet UIButton *detailsButton;
@property (strong, nonatomic) NSArray *identities;
@property (strong, nonatomic) NSDictionary *selectedIdentity;
 
@end
 
@implementation ViewController
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ReuseID"];
    if (!cell)
    {
        cell = [tableView dequeueReusableCellWithIdentifier:@"ReuseID"];
    }
    
    return cell;
}
 
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *currentItem = self.identities[indexPath.row];
    NSString *title = [NSString stringWithFormat:@"%@ %@", [currentItem objectForKey:@"name"], [currentItem objectForKey:@"surname"]];
    cell.textLabel.text = title;
}
 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIdentity = self.identities[indexPath.row];
}
 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60;
}
 
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.identities count];
}
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
 
- (IBAction)fetchTriggered:(id)sender
{
    [INTools performGETRequestWithURL:@"http://someurl" completion:^void (NSData *data) {
        NSArray *responseArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        
        self.identities = responseArray;
        
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    }];
    
}
 
- (IBAction)detailsTriggered:(id)sender
{
    NSString *urlString = [NSString stringWithFormat:@"http://someurl%@", [self.selectedIdentity objectForKey:@"id"]];
    [INTools performGETRequestWithURL:urlString completion:^void (NSData *data){
        NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        self.selectedIdentity = responseDictionary;
        
        UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedDown)];
        swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
        
        INInfoViewController *detailViewController = [[INInfoViewController alloc] initWithNibName:@"INInfoViewController" bundle:nil];
        [detailViewController.view addGestureRecognizer:swipeDown];
        
        [self presentViewController:detailViewController animated:YES completion:nil];
        
    }];
}
 
- (NSDictionary *)getSelectedItem
{
    return [self.selectedIdentity copy];
}
 
- (void)swipedDown
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
 
@end
infoDelegate.h
Objective-C
1
2
3
4
5
6
7
@protocol infoDelegate <NSObject>
 
@required
 
- (NSDictionary *)getSelectedItem;
 
@end
infoViewController
Objective-C
1
2
3
4
5
6
7
8
#import <UIKit/UIKit.h>
#import "infoDelegate.h"
 
@interface INInfoViewController : UIViewController
 
@property (weak, nonatomic) id <infoDelegate> delegate;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#import "INInfoViewController.h"
#import "ViewController.h"
 
@interface INInfoViewController ()
@property (weak, nonatomic) IBOutlet UILabel *idLabel;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *surnameLabel;
@property (weak, nonatomic) IBOutlet UILabel *infoLabel;
@property (weak, nonatomic) IBOutlet UILabel *created_atLabel;
 
@end
 
@implementation INInfoViewController
 
- (void)viewDidLoad
{
    self.delegate = (ViewController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
    NSDictionary *item = [self.delegate getSelectedItem];
    [super viewDidLoad];
    [[self idLabel] setText:[[item objectForKey:@"id"] stringValue]];
    [[self nameLabel] setText:[item objectForKey:@"name"]];
    [[self surnameLabel] setText:[item objectForKey:@"surname"]];
    [[self infoLabel] setText:[item objectForKey:@"info"]];
    [[self created_atLabel] setText:[item objectForKey:@"created_at"]];
 
}
 
@end
класс с методами для запросов
Objective-C
1
2
3
4
5
6
7
8
#import <Foundation/Foundation.h>
 
@interface INTools : NSObject
 
+ (void)performGETRequestWithURL:(NSString *)urlString completion:(void (^)(NSData *))completion;
+ (void)sendUUIDToURL:(NSString *)urlString;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#import "INTools.h"
 
@implementation INTools
 
+ (void)performGETRequestWithURL:(NSString *)urlString completion:(void (^)(NSData *))completion
{
    NSURLSession *session = [NSURLSession sharedSession];
    
    NSURL *url = [[NSURL alloc] initWithString:urlString];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        
        NSData *data = [[NSData alloc] initWithContentsOfURL:location];
        completion(data);
        
    }];
    [task resume];
}
 
+ (void)sendUUIDToURL:(NSString *)urlString
{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:nil];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
    
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
    
    NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSUUID UUID].UUIDString, @"imei", @"hello world", @"message", nil];
    
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:kNilOptions error:nil];
    [request setHTTPBody:jsonData];
    
    
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}];
    [postDataTask resume];
}
 
@end
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru