Ответы пользователя по тегу Objective-C
  • NSString: чем лучше зашифровать/дешифровать?

    alexv1981
    @alexv1981 Автор вопроса
    Сори, что не погуглил перед этим.
    Есть решение: stackoverflow.com/questions/12785556/ios-encrypt-d...
    Ответ написан
    Комментировать
  • UIWebView: как отловить событие загрузки страниц на ajax-сайтах?

    alexv1981
    @alexv1981 Автор вопроса
    Хм... а при загрузке в браузер этой странички с использованием моего протокола, вообще тормоза и зависания немалые. Вроде делал все как тут:

    @implementation WebBrowserURLProtocol
    {
        NSURLConnection *_connection;
    }
    
    #pragma mark - NSURLProtocol
    
    + (BOOL)canInitWithRequest:(NSURLRequest *)request
    {
        if ([NSURLProtocol propertyForKey:@"urlConnectionSent" inRequest:request] != nil)
            return NO;
        
        return YES;
    }
    
    + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
    {
        return request;
    }
    
    - (void)startLoading
    {
        NSMutableURLRequest *newRequest = [self.request mutableCopy];
        
        [NSURLProtocol setProperty:@YES forKey:@"urlConnectionSent" inRequest:newRequest];
        
        _connection = [NSURLConnection connectionWithRequest:newRequest delegate:self];
    }
    
    - (void)stopLoading
    {
        [_connection cancel];
    }
    
    #pragma mark - NSURLConnectionDelegate
    
    - (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];
        _connection = nil;
    }
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
    }
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        [self.client URLProtocolDidFinishLoading:self];
        _connection = nil;
        
        [WebBrowserURLProtocol postNotification];
    }
    
    #pragma mark - Notifications
    
    +(void)postNotification
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"kURLProtocolDidFinishLoading" object:nil];
        });
    }
    
    @end


    В итоге я переписал класс, используя в нем только один метод
    + (BOOL)canInitWithRequest:(NSURLRequest *)request
    и тормоза пропали. Для задачи обновления кнопок назад/вперед это вполне сносно:

    @implementation WebBrowserURLProtocol
    
    +(void)postNotification
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"kURLProtocolDidFinishLoading" object:nil];
        });
    }
    
    + (BOOL)canInitWithRequest:(NSURLRequest *)request
    {
        [WebBrowserURLProtocol postNotification];
        
        return NO;
    }
    
    + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
    {
        return request;
    }
    
    - (void)startLoading
    {
    }
    
    - (void)stopLoading
    {
    }
    
    @end


    от чего такие неурядицы с этим классом....?
    Ответ написан
    Комментировать