14 июля 2011 г.

Конвертирование plist в бинарный формат (bplist) и обратно в текстовый

Да, мне кажется, что задача бессмысленна, так как методы чтения plist-ов ([NSDictionary dictionaryWithContentsOfFile:(NSString *)path]) одинаково хорошо понимают, что plist в бинарном формате, что в текстовом. Но все ж возникла задача отдать на редактирование plist третьей стороне для редактирования в текстовом редакторе, а для этого пришлось сконвертировать plist в текстовый формат. Итак, в терминале выполняем команду:
$ plutil -convert xml1 ./myBinaryPlist.plist 
и назад из текстового в бинарный:
$ plutil -convert binary1 ./myTextPlist.plist 

17 июня 2011 г.

Запрет лока экрана при запущенном приложении в iOS

[UIApplication sharedApplication].idleTimerDisabled = YES;

Рисование под статус баром в iOS

Полезно иногда просматривать официальную документацию.

В моем приложении, так-же как и в стандартном Photos необходимо убирать статус бар при тапе на экран, но так, что б вью на экране не "прыгало". Думал уже реализовывать кастомным вью и непосредственно добавлять его на UIWindow, но нашел замечательное свойство wantsFullScreenLayout у UIViewController, которое все проблеммы решило.

9 мая 2011 г.

Размытый текст в UILabel

Я не привык пользоваться Interface Builder в xCode. Все компоненты создаю динамически и для меня это вполне удобно. И вот недавно столкнулся с проблемой отображения текста в компоненте UILabel, а поскольку это "корневая" компонента входящая в такие компоненты как UIButton и UITableViewCell, то проблема оказалась серьезной.

Итак, на скриншоте ниже отображены UILabel с одним шрифтом и одним и тем-же размером.



Вторая метка выглядит размытой. Вот код, которым я создавал эти UILabel.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
 CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
    
    UILabel *normal = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 30.0, screenRect.size.width, 50.0)];
    normal.text = @"Test label1";
    normal.textAlignment = UITextAlignmentCenter;
    normal.font = [UIFont systemFontOfSize:16.0];
    normal.backgroundColor = [UIColor clearColor];
    [self.window addSubview:normal];
    [normal release];
    
    
    UILabel *fuzzy = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 60.55, screenRect.size.width, 50.0)];
    fuzzy.text = @"Test label2";
    fuzzy.textAlignment = UITextAlignmentCenter;
    fuzzy.font = [UIFont systemFontOfSize:16.0];
    fuzzy.backgroundColor = [UIColor clearColor];
    [self.window addSubview:fuzzy];
    [fuzzy release];
    
    
    [self.window makeKeyAndVisible];
    return YES;
}
Решилось все просто, оказывается UILabel не дружит с нецелыми координатами (60.5 - в CGRectMake(0.0, 60.5, screenRect.size.width, 50.0))

3 мая 2011 г.

Отключение подтверждения закрытия вкладок Safari

Сегодня окончательно достало вплывающее окно подтверждения закрытия вкладки в Сафари при заполненной форме на странице (поиск гугла, гугл переводчик). На просторах рунета быстро нашлось решение - "Отключение подтверждения закрытия вкладок Safari", за что автору спасибо.

Продублирую здесь код, так как страницы имеют свойство умирать.
$ /usr/bin/defaults write com.apple.Safari DebugConfirmTossingUnsubmittedFormText -boolean No
За более подробным описанием смотрите первоисточник.

1 мая 2011 г.

Удаление ярыка "Macintosh HD" с рабочего стола в MacOS

Удаляется просто, пост для того, что б в интернетах долго не искать.

В настройках Finder снимаем галочку с "Show these items on desctop"->"Hard disks":

23 апреля 2011 г.

Куки в iOS (UIWebView)

Для каждого приложения в iOS существует свое хранилище http-cookies. Класс, который отвечает за куки - NSHTTPCookieStorage. Класс имеет простой интерфейс доступа к кукам, например прочитать все куки можно так:
for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
{
NSLog(@"%@", cookie);
}
Так-же есть методы утановки куков (- setCookie:), и чтения для конкретного урла (– cookiesForURL:)