Показаны сообщения с ярлыком Cocoa. Показать все сообщения
Показаны сообщения с ярлыком Cocoa. Показать все сообщения

16 мар. 2015 г.

Swift Development with Cocoa


Ready to build apps for iPhone, iPad, and Mac now that Swift has landed? If you're an experienced programmer who's never touched Apple developer tools, this hands-on book shows you how to use the Swift language to make incredible iOS 8 and OS X apps, using Cocoa and Cocoa Touch.

Learn how to use Swift in a wide range of real-world situations, with Cocoa features such as Event Kit and Core Animation. You'll pick up Swift language features and syntax along the way, and understand why using Swift (instead of Objective-C) makes iOS and Mac app development easier, faster, and safer. You'll also work with several exercises to help you practice as you learn.

Publisher: O'Reilly Media
By: Jonathon Manning, Paris Buttfield-Addison, Tim Nugent
ISBN: 978-1-49190-894-5
Year: 2014
Pages: 474
Language: English
File size: 9.8 MB
File format: PDF

8 дек. 2014 г.

Кастомные сниппеты кода в Xcode.

Как довольно часто приходится набирать при каждом новом проекте или иногда в каком-то из контроллеров код, который Вы набирали пару дней назад в другом проекте, а ведь время не заставляет себя ждать. Найти старый проект, вытянуть из него нужный код, поменять название класса / переменной и прочих данных тоже занимает время. Можно воспользоваться рефакторингом ИДЕ, что тоже не плохо. А можно сделать себе сниппет и просто менять выделенные подсказки на свои данные. Работает это на подобии когда вы пишете ' if ' или ' init ' и ИДЕ сама подкидывает Вам необходимые символы, запятые, переносы и т.д.

Например возьмем локализацию Вашего приложения, выгладит это примерно так:

NSLocalizedString(@"appName", nil)

Нужно набрать NSLocalizedString потом добавить кавычки, между кавычками прописать название переменной, вместо которой из файла приложение возьмет нужный перевод слова.

Упростим немножко. Сделаем так чтобы по нашему набору определенного ключа появлялся код выше, и нам оставалось лишь только вписать название переменной. В любом месте редактора набираем следующее:

NSLocalizedString(@"<#localizeVariableName#>", nil)

Как только вы закроете правую скобку после хеш-символа, у Вас слово, которое внутри хеш-символов преобразится в черновой вариант с голубого цвета заливкой:

NSLocalizedString(@"localizeVariableName", nil)

Теперь выделяем наш код и нажимаем кнопку мыши на голубом фоне и не отпуская перетаскиваем вправо в библиотеку сниппетов. Там уже можно отредактировать по какому ключу ИДЕ будет подставлять этот код. Например себе я упростил простым словом ' localize '. И теперь когда я набираю это слово, Xcode автоматически предлагает мне подстановку моего сниппета.


Конвертация кириллицы для API-запросов к сайтам

Всем известно, что при API-запросах ко многим сайтам в которых передаваемые параметры состоят из кириллицы, сервер вернет ответ об ошибке, т.к. сам сервер не понимает кодировку кириллицы и сам сконвертировать он ее не может.

Ниже представлен простой метод который конвертирует кириллицу в понятную для многих серверов кодировку:

- (NSString *)urlEncode:(NSString *)str {
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));
}

10 июн. 2014 г.

9 июн. 2014 г.

8 июн. 2014 г.

6 июн. 2014 г.

4 июн. 2014 г.

3 июн. 2014 г.

Swift: Простой пример NSTableView (@Action)

Усложним предыдущий пример простым добавлением строк (Добавим кнопки):
Сделаем @Action на кнопки, и напишем такой код:

@IBAction func addDataToTableView(sender : NSButton) {
        
        tableArrayData.insert("New String", atIndex: 0)
        tableView.reloadData()
        
    }
    
    @IBAction func removeDataFromTableView(sender : NSButton) {
        
        if tableArrayData.count != 0 {
         
            tableArrayData.removeAtIndex(0)
            tableView.reloadData()
            
        }
        
    }

Получится вот так:


Swift: Простой пример NSTableView

Только что поюзав первый раз Xcode 6 Beta (запустил с третьего раза) по памяти наваял табличку. Скажу сразу что очень плохо работает автодополнение. Все делаем как и в предыдущих примерах по Cell-Based таблицах. Выделяем таблицу, делаем связку dataSource и delegate с AppDelegate. А дальше код:

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate, NSTableViewDataSource {
                            
    @IBOutlet var window: NSWindow
    @IBOutlet var tableView: NSTableView
    
    var tableArrayData = ["Dad", "Mom", "Son", "GrandMother", "Cat", "Bird", "Kakashka"]


    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(aNotification: NSNotification?) {
        // Insert code here to tear down your application
    }

    func numberOfRowsInTableView(tableView: NSTableView!) -> Int    {
        
        return tableArrayData.count
    }
    
    func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject! {
        
        return tableArrayData[row]
    }

}

2 июн. 2014 г.

ORB OS X Icon Pack by Luke O'Sullivan


ORB OS X Icon Pack by Luke O'Sullivan

New:
- Activity Monitor
- Airport Utility
- Bluetooth (File Exchange)
- Chess (!)
- Chrome (from Frost for OS X)
- Dictionary
- Disk Utility
- DropBox
- iConvert Icons
- Adobe Illustrator
- Adobe InDesign
- Mission Control
- OS X
- Adobe Photoshop
- Skype
- Spotify
- System Info
- Time Machine
- VLC

Original:
- App Store
- iLife (iMovie x2, GarageBand x2, iPhoto)
- Calendar (x2)
- Citrix Receiver
- Contacts
- Dashboard
- FaceTime
- Finder
- Font Book *updated*
- iBooks (now x2) *updated*
- Image Capture
- iTunes (in blue and red)
- Keynote *updated*
- Launchpad
- Leap Motion
- Mail
- Maps
- Messages
- Notes
- Numbers
- Pages
- PhotoBooth
- Preview *updated*
- QuickTime (x2)
- Reminders
- Safari
- Settings (now x2) *updated*
- Terminal *updated*
- Text Edit *updated*

Cocoa Design Patterns


Cocoa Design Patterns is superb! It is highly readable, thoroughly enjoyable, and filled to the brim with wisdom that will make you a more efficient and effective programmer. The authors utilize a consistent and self-contained approach to each chapter, making it easy to return to use as a reference. However, the material is so interesting and vital to Cocoa programmers that you’ll want to read it from cover to cover.

Советы и Рекомендации: Протоколы

Бывает такая штука в протоколах как необязательные / опциональные методы @optional. При работе с объектами/классами, особенно в больших проектах, заведомо не знаешь реализован тот или иной необязательный метод в классе, например, другим разработчиком класса. При компиляции проекта, компилятор не укажет на это даже в варнингах (warnings). После запуска приложения и обработке входящих объектов, в которых из них не будет реализации опциональных методов, естественно приложение упадет. Для проверки реализации опционального метода в классе/объекте рекомендуется использовать селекторы, т.е. вся отвественность ложиться на разработчика:

[objectName respondToSelector:@selector(protocolMethodName)]

т.е. здесь мы проверяем реализован ли в объекте/классе objectName метод описанный в протоколе protocolMethodName. Результат булевый YES | NO.

Как узнать, использует ли объект/класс протокол (подключен ли протокол)?:

[objectName conformsToProtocol:@protocol(protocolName)]

Результат булевый YES | NO.

25 мая 2014 г.

NSCollectionView без байндингов: Ячейки из NSView

В предыдущей статье я описал как создать NSCollectionView программно. В этой короткой статье я опишу как создать ячейки / итемы на основе кастомной NSView. Все почти также само как и с View-based NSTableView. Добавляем новый класс NSViewController, подключаем его в BVView.h:



#import <Cocoa/Cocoa.h>
#import "ViewController.h"

@interface BVView : NSView {
    
    ViewController *customView;

}

@end

#import "BVView.h"

@implementation BVView

- (id)initWithFrame:(NSRect)frameRect
{
    // Создаем модель-вьюху
    customView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];    
    
    self = [super initWithFrame:(NSRect)customView.view.frame];
    
    if (self) {
        
        [self addSubview:[customView view]];
        
    }
    
    return self;
}


В принципе все. Обращаться к элементам интерфейса можно через протокол/делегат (пример NSTableView).