Ответы пользователя по тегу iOS
  • Как передать данные между ios приложениями?

    alexyat
    @alexyat
    iOS Developer
    Все достаточно просто, приложение которе передает данные должно создать
    UIDocumentInteractionController;

    UIDocumentInteractionController *_controller;
    
    if(!_controller)
                _controller = [[UIDocumentInteractionController alloc]init];
            _controller.delegate = self;
            NSURL *documentURL = @"тут должен быть урл в файловой системе, в который записаны данные которые нужно передать";
            _controller.URL = documentURL;
            if(![_controller presentOpenInMenuFromRect:cell.frame inView:self animated:YES])
            {
                NSLog(@"can't open in another app");
            }
            else
                NSLog(@"Open in another app");
    
    // ну и делигат методы
    
    - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {
        
        return  self;// это вьюв контроллер в котором будет всплывающее меню с выбором аппа который будет открывать.
    }
    
    - (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {
        
        NSLog(@"Starting to send this puppy to %@", application);
    }
    
    - (void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application {
        
        NSLog(@"We're done sending the document.");
    }


    в принимающем аппе нужно в Info.plist добавить Exported Type UTIs, и добавить при запуске аппа обработку launchOptions

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    что-то типа вот такого

    NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    NSData* data = [NSData dataWithContentsOfURL:url];


    и делать уже что угодно с этой NSData, преобразовывать в то что вам нужно.

    подробнее как добавить вашему аппу возможность открывать файлы написано тут главное чтобы файл который вы создали в первом аппе был с тем же расширением которое вы зарегистрируете во втором.
    Ответ написан
    2 комментария
  • Чем занимаются junior ios, после того как устроились в компанию?

    alexyat
    @alexyat
    iOS Developer
    Учатся, фиксят баги, изучают код проекта, который находится в процессе разработки.
    Ответ написан
    Комментировать
  • Как сделать скролинг повторяющимся?

    alexyat
    @alexyat
    iOS Developer
    Все уже давно написано https://github.com/malcommac/DMCircularScrollView бесконечный замкнутый скролл.
    Ответ написан
    Комментировать
  • Как передать управление нажатием на объект в основной контроллер?

    alexyat
    @alexyat
    iOS Developer
    2 и 3 это одно и тоже. 1 способ(с notifications) используется если нужно оповестить несколько разрозненных объектов. Думаю в Вашем случаи проще всего сделать ссылку на контроллер в CardView.
    Ответ написан
  • Заполнить view кнопками?

    alexyat
    @alexyat
    iOS Developer
    а что мешает заполнять относительно первой рандомной кнопки по кругу от нее, или от каждой новой созданной последующей.
    Ответ написан
    Комментировать
  • Как правильно интегрировать iAd в iOS-приложение?

    alexyat
    @alexyat
    iOS Developer
    Для iOS 7 ничего практически не изменилось, куча гайдов гуглятся за 1 минуту. То что на скрине это https://chartboost.com
    Ответ написан
    Комментировать
  • Как лучше всего, с точки зрения удобства пользователя, реализовать удаление элементов из списка?

    alexyat
    @alexyat
    iOS Developer
    3й вариант, и сделать таблицу не на весь экран. Задать ей фрейм как у pickerView.
    Ответ написан
    2 комментария
  • UIWebView: как вести историю URL-адресов на ajax-сайтах?

    alexyat
    @alexyat
    iOS Developer
    NSURLProtocol вам в помощь, eng.42go.com/customizing-uiwebview-requests-with-n... видит все http запросы.
    Например моя заготовка для детекта mp3, чтобы зарегать класс, выполняю. этот код

    [NSURLProtocol registerClass:[MP3DetectURLProtocol class]];


    MP3DetectURLProtocol.h
    #import <Foundation/Foundation.h>
    
    @interface MP3DetectURLProtocol : NSURLProtocol
    
    @property (nonatomic, strong) NSURLConnection *connection;
    
    @end


    MP3DetectURLProtocol.m
    #import "MP3DetectURLProtocol.h"
    
    @implementation MP3DetectURLProtocol
    
    static NSString *PBProxyURLHeader = @"X-PB";
    
    + (BOOL)canInitWithRequest:(NSURLRequest *)request
    {
        //if([[request.URL absoluteString] rangeOfString:@"mp3"].length !=0)
            NSLog(@"request url = %@", [request.URL absoluteString]);
        if ([request valueForHTTPHeaderField:PBProxyURLHeader] == nil)
        {
            return YES;
        }
        return NO;
    }
    
    + (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request
    {
        return request;
    }
    
    - (void) startLoading
    {
        NSMutableURLRequest *newRequest = [self.request mutableCopy];
        [newRequest setValue:@"" forHTTPHeaderField:PBProxyURLHeader];
        // Here we set the User Agent
        //[newRequest setValue:@"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36 Kifi/1.0f" forHTTPHeaderField:@"User-Agent"];
        
        //[NSURLProtocol setProperty:@YES forKey:@"UserAgentSet" inRequest:newRequest];
        //NSLog(@"start loading");
        self.connection = [NSURLConnection connectionWithRequest:newRequest delegate:self];
    }
    
    - (void)stopLoading
    {
        //[self.connection cancel];
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        [self.client URLProtocol:self didLoadData:data];
    }
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {
        [self.client URLProtocol:self didFailWithError:error];
        self.connection = nil;
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
    }
    
    - (NSURLRequest *)connection:(NSURLConnection *)connection
                 willSendRequest:(NSURLRequest *)request
                redirectResponse:(NSURLResponse *)response
    {
        [self.client URLProtocol:self wasRedirectedToRequest:request redirectResponse:response];
        return nil;
    }
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        [self.client URLProtocolDidFinishLoading:self];
        self.connection = nil;
    }
    
    @end
    Ответ написан
  • Как пройти модерацию в App Store приложению с SMS-авторизацией в РФ?

    alexyat
    @alexyat
    iOS Developer
    тестовый аккаунт им дать, без смс авторизации. Или сделать фейковый номер типа +7000 0000 и для него все время один и тот же код авторизации высылать 1111. Написать им об этом и все.
    Ответ написан
    Комментировать
  • Как реализовать non-renewing подписку в iOS?

    alexyat
    @alexyat
    iOS Developer
    Делал такие подписки:
    1 свой сервер
    2 сохранение производится отсылкой рецепта покупки + mac устройства
    3 восстановление по запросу к АПИ с отправкой мака
    4 регистрация не обязательна(требование Apple), но нужно предупреждать юзера что нужно регаться если захочет восстановить на другом устройстве
    Ответ написан
    9 комментариев
  • Как создать простейшее приложение под iOS?

    alexyat
    @alexyat
    iOS Developer
    Если Вам не нужна кросс-платформенность, то лучше делать все нативно, даже если там будет простой html. Так что xcode Вам в руки.
    Ответ написан
    Комментировать
  • MVC в IOS: может ли Model иметь Delegate к контролеру?

    alexyat
    @alexyat
    iOS Developer
    Может, можете написать все что душе угодно. Только на картинке что вы запостили, там написано в Model - KVO & Notification, и лучше использовать их при обновлении данных в модели, т.к. обычно об обновлении данных нужно узнать нескольким Controller, сделать это проще через notification, а Key-Value Observing нужно когда один контроллер следит за какой-то переменной.
    Ответ написан
    Комментировать
  • Как записать данные в конец файла с помощью NSFileCoordinator при сохранении UIDocument в iCloud?

    alexyat
    @alexyat
    iOS Developer
    Дозапись в файл делается через хендлер, например вот так:

    NSString *dir = [pathCache stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.download", [itemToDownload fileName]]];
        if(data)
            [tmpData appendData:data];
        if(![tmpData length])
            return;
        NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:dir];
        [handle seekToEndOfFile];
        [handle writeData:tmpData];
        [handle closeFile];
        [tmpData setLength:0];

    где tmpData это NSData
    Ответ написан
  • Как остановить UIActivityIndicatorView?

    alexyat
    @alexyat
    iOS Developer
    Вот из-за таких проблем я всем рекомендую отказаться от использования Interface builder.
    Ответ написан
  • Как вывести неопределенное количество строк в iOS?

    alexyat
    @alexyat
    iOS Developer
    Есть стандартный контрол UITextView, вы можете сделать его любого размера, и кинуть ему текст, а он сам добавит скролл, если надо. Также не забудьте выставить свойство editable в NO, чтобы он не давал редактировать текст.
    Ответ написан
    Комментировать
  • Как задействовать клавишу return на клавиатуре iOS?

    alexyat
    @alexyat
    iOS Developer
    Задать для UITextField, delegate, и в нем обрабатывать вызов данного метода
    - (BOOL)textFieldShouldReturn:(UITextField *)textField в зависмости от того какой textField пришел.
    Ответ написан
    Комментировать
  • Какие есть best practice для проектов под iPhone?

    alexyat
    @alexyat
    iOS Developer
    1 Нужно отказаться от storyboard, она была сделана для дизайнеров-программистов, имхо. Обычно, проект стилистически един, одинаковые поля ввода, одинаковые кнопки, отличаются только позиции, ну и всякие мелочи. В таких случаях создаю класс с статическими методами, которым передаешь CGRect и NSString, а они тебе кнопку или лабел например.
    2 Нотификацию обычно используют, когда нужно оповестить несколько классов, например о загрузке данных. Для остального есть делегат и синглтон
    3 Тут кому как больше нравиться, я раскладываю все по каталогам и создаю refs с иакими же именами. Именую так - RootVC, UserView, UserItem
    4 Отказавшись от сториборда, использую только NSLocalizedString
    Ответ написан
    Комментировать
  • Пример использования MVC в iOS — устройство сложного контрола + взаимодействие?

    alexyat
    @alexyat
    iOS Developer
    MVC в iOS достаточно специфичная, для вас главное понимать что это значит и для чего нужно - Model - модель(это ваши данные), View - представление(это кнопочки, надписи, все что видно) и Control - это логика, вспомогательные методы и классы которые в большинстве случаев помогают взаимодействовать первым двум. Вам важно понять что все эти вещи должны быть разделены, чтобы вы могли легко менять отдельные части, чтобы у вас не смешивались данные и интерфейс.
    Ответ написан
    2 комментария
  • Отправка скрытой SMS в iOS?

    alexyat
    @alexyat
    iOS Developer
    в plist приложения добавить нужно ключ com.apple.messages.composeclient и выставить его значение в YES
    Ответ написан
    2 комментария
  • Ошибка при запуске проекта в xCode 5 после подключения MessageUI?

    alexyat
    @alexyat
    iOS Developer
    В комментарии тег кода не работает, поэтому напишу тут и удалить комментарий нельзя (
    переиспользовать код, разновидностей кнопок в одном проекте 1-3 вот и делаете класс у которого статические методы строят кнопки, по нескольким параметрам... CGRect и допустим title и просто кладете их сразу на нужный вам вью и везде вызов в 1 строку этой статической функции Например вот так:
    +(UIButton*)greenButtonWithObject:(id)object andRect:(CGRect)rect fontSize:(float)size
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        UIImage *stretchBG = [[UIImage imageNamed:@"greenbutton.png"]
                              stretchableImageWithLeftCapWidth:10.0 topCapHeight:10.0];
        button.frame = rect;
        if([object isKindOfClass:[UIImage class]])
            [button setImage:object forState:UIControlStateNormal];
        else
        {
            [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [button.titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:size]];
            [button setTitle:object forState:UIControlStateNormal];
        }
        [button setBackgroundImage:stretchBG forState:UIControlStateNormal];
        return button;
    }
    Ответ написан
    Комментировать