http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/pyobjc.ru comments on SQL для самых маленьких2011-01-25T19:15:24ZEvgeniy KrysanovАлексей БлиновValEvgeniy KrysanovValhardwarriorEvgeniy KrysanovvinnyEvgeniy KrysanovAlexanderЯрослав МоталовMerlinamisamisAlexanderДмитрийЧеславValЧеславalexey pakhomovValalexey pakhomovalexey pakhomovalexey pakhomoviMikeАнтон СConstantineсергейdjango-atompubhttp://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c481Comment on SQL для самых маленьких by сергей2011-01-25T19:15:24Z2011-01-25T19:15:24Zсергей<p>Добрый день. А какую локальную БД ещё можно использовать для МакОС? Все примеры SQLLite направлены именно для айфона, я так посмотрю. А я ищу для большого брата&nbsp;решение&#8230; </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c474Comment on SQL для самых маленьких by Constantine2010-12-02T14:46:54Z2010-11-30T23:31:23ZConstantine<p>ребята откуда взялись 2 файла mainViewController.h и mainViewController.m их же не было в &#8220;правильном&#8221; текстовом&nbsp;редакторе&#8230; </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c437Comment on SQL для самых маленьких by Антон С2009-11-13T03:42:12Z2009-11-13T03:42:12ZАнтон С<p>Можно сделать по&nbsp;другому: </p> <pre><code>if (record.primaryKey != 0) { [record updateRecord]; } else { if ([record insertIntoDatabase:database]) [records addObject:record]; } </code></pre><p>Только для этого надо будет изменить тип функции insertIntoDatabase: с (void) на (<span class="caps">BOOL</span>) и добавить в функцию корректный return&nbsp;тут: </p> <pre><code>if ((self.text == nil) || (text.length == 0)) return FALSE; </code></pre><p>и добавить в конце функции (<span class="caps">BOOL</span>)insertIntoDatabase:&nbsp;строчку: </p> <pre><code>return TRUE; </code></pre>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c363Comment on SQL для самых маленьких by iMike2009-04-22T12:39:19Z2009-04-22T12:25:11ZiMike<p>В первую очередь хочу выразить автору свою благодарность за этот труд. Особенно очень нравится стиль написания статей. Как для меня, так можно еще меньше давать кода (лучше описать идею метода) в статье да бы дать читателю как можно больше на освоение и самостоятельную реализацию. Хотя я в обще впервые сталкиваюсь с С языком &mdash; до этого все время писал на Delphi. Но вот купил себе iPhone и как всегда решил открыть для себя что то новое &mdash; но это уже другая&nbsp;история. </p> <p>А теперь по статье! Я нашел еще один &#8220;бок&#8221; в Вашей статье (аппликации). Попробуйте сделать следующие действия (в симуляторе): нажмите &#8220;+&#8221;, то есть добавить новую запись, и как только он создастся &mdash; нашу кнопку &#8220;Back&#8221;. Все отлично, в нашу базу новая запись не попадет, так как сработает проверка в методе -(void)insertIntoDatabase:(sqlite3 *)db (файл&nbsp;Record.m): </p> <pre><code>if((self.txt==nil)||(txt.length==0)) return; </code></pre><p>Таким образом мы вернемся к списку записей. А теперь попробуйте кликнуть по пустой ячейке в нашей таблице, следующей сразу же за последней непустой. Мы попадем в окно редактирования. Как это получилось? Давайте заглянем в файл txtEditAppDelegate.m в метод -(void)updateOrAddRecordIntoDatabase:(Record&nbsp;*)record: </p> <pre><code>if(record.primaryKey!=0){ [record updateRecord]; }else{ [record insertIntoDatabase:database]; //Вставить запись в базу, но там сработает проверка на пустоту [records addObject:record]; //а вот посылкой этого сообщения мы добавляем пустую запись в наш список } </code></pre><p>По этому метод должен выглядеть&nbsp;так: </p> <pre><code>if(record.primaryKey!=0){ [record updateRecord]; }else{ if((record.txt==nil)||(record.txt.length==0)) return; [record insertIntoDatabase:database]; [records addObject:record]; } </code></pre><p>И теперь подобное не повторится. Естественно в insertIntoDatabase: проверка на пустоту уже не понадобится, так что от туда ее можно&nbsp;убрать. </p> <p>ЗЫ Надеюсь понятливо&nbsp;описал:) </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c357Comment on SQL для самых маленьких by alexey pakhomov2009-04-09T01:56:26Z2009-04-09T01:56:26Zalexey pakhomov<p>все.разобрался сам. спасибо&nbsp;) </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c354Comment on SQL для самых маленьких by alexey pakhomov2009-04-09T01:55:58Z2009-04-08T22:21:03Zalexey pakhomov<p>а мож кто в курсе: бд делаю в excell под mac os.там сохраняю файл как utf 16 txt(так как только тут нормально русский язык оторбражаеться). импорт потом в бд делаю через плагин для firefoxa. все отлично работает вот только utf-16 не устраивает мож кто знает как сохранять в&nbsp;utf-8??? </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c353Comment on SQL для самых маленьких by alexey pakhomov2009-04-08T22:12:47Z2009-04-08T22:12:47Zalexey pakhomov<p>а можете поделица ссылкой или личным опытом как заливать в mysql и конвертировать&nbsp;там? </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c352Comment on SQL для самых маленьких by Val2009-04-08T04:27:42Z2009-04-08T04:27:11ZVal<p>я базу заливал в mySQL, там конвертировал в  <span class="caps">UTF</span>-8, потом опять заливал в sqlite. У меня правда была в кирилице в mdb база. Но принцип можно использовать. Я так полистал гугл &mdash; много жалоб на этот оператор. Может проблема в именах &#8212; в коде Objective-C  по умолчанию <span class="caps">UTF</span>-8 идёт. Это просто&nbsp;гипотезы. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c351Comment on SQL для самых маленьких by alexey pakhomov2009-04-08T02:10:20Z2009-04-08T02:10:20Zalexey pakhomov<p>А как быть если данные в бд в кодировке <span class="caps">UTF</span>-16. есть функции для работы с <span class="caps">UTF</span>-16. открытие БД проходит без проблем (sqlite3_open16) а вот уже sqlite3_prepare16_v2 не хочет работать. не знаю где баг. помогите&nbsp;разобраться </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c344Comment on SQL для самых маленьких by Val2009-03-15T21:39:00Z2009-03-15T21:38:26ZVal<p>Нужно загрузить сертификат для Вашего iPhone с сайта Apple iPhone Developer Center. Там нужно за 100 долларов зарегистрироваться&nbsp;сначала. </p> <p>Там же много примеров кода, в том числе загрузка и парсинг файлов&nbsp;xml. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c343Comment on SQL для самых маленьких by Чеслав2009-03-15T15:11:06Z2009-03-15T15:11:06ZЧеслав<p>А что нужно сделать, что бы запустить отладку на iPhone. Выдает вот что Line Location Tool:0: CodeSign error: Code Signing Identity &#8216;iPhone Developer&#8217; does not match any code-signing certificate in your keychain. Once added to the keychain, touch a file or clean the project to&nbsp;continue. </p> <p>Спасибо! И еще&#8230; Не могли бы вы написать пример по получению файлов xml из интернета, с последующим их&nbsp;ччтением </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c309Comment on SQL для самых маленьких by Дмитрий2009-01-09T02:16:08Z2009-01-09T02:13:49ZДмитрий<p>В чем тайный смысл этой&nbsp;конструкции? </p> <pre><code>NSMutableArray *recordsArray = [[NSMutableArray alloc] init]; self.records = recordsArray; [recordsArray release]; </code></pre><p>И&nbsp;этой: </p> <pre><code>success = [fileManager....]; if (!success) { NSAssert1(NO, ....); </code></pre><p>Не лучше&nbsp;ли: </p> <pre><code>records = [[NSMutableArray alloc] init]; </code></pre><p>и </p> <pre><code>success = [fileManager....]; NSAssert1(success, ....); </code></pre>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c308Comment on SQL для самых маленьких by Alexander2009-01-08T06:35:29Z2009-01-08T06:33:35ZAlexander<p>Я нашёл ещё один баг. Если у меня заметка на весь экран айфона, я её открываю, хочу добавить текст в конце. Нажимаю на последнюю строчку, выезжает клавиатура, а фокус получается далеко не на той строчке, которую я нажимал. Видимо, дело в ресайзинге view. Надо почитать Moving Content That Is Located Under the Keyboard. Спасибо за статьи. Прям не знаю чё бы я без них&nbsp;делал. </p> <p><span class="caps">PS</span>: блин, опять не туда коммент засунул. Пока статью осилишь, мозг уже отдыха&nbsp;просит. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c306Comment on SQL для самых маленьких by amis2009-01-02T11:18:18Z2009-01-02T11:10:54Zamis<p>Кстати спасибо за Ваши&nbsp;статьи </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c305Comment on SQL для самых маленьких by amis2009-01-02T11:10:53Z2009-01-02T11:10:53Zamis<p>По поводу изменения размеров UIView при появлении/сокрытии клавиатуры думаю код не очень удачен. А как будет работать ваша программа если выйдет IPhone nano с несколько другим размером экрана или Apple что-то в клавиатуру добавит например смайлики что изменит её размер. Не очень хорошая мысль задавать координаты явно в коде. Кстати говоря в документации iPhone Application Programming Guide в разделе Moving Content That Is Located Under the Keyboard, есть куда более правильный метод автоматического перестроения UIView при появлении&nbsp;клавиатуры. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c284Comment on SQL для самых маленьких by Merlin2008-11-23T06:16:45Z2008-11-23T06:16:45ZMerlin<p>Сам начал искать редактор после прочтения статьи. Вот нашел замечательный и главное бесплатны. Правда реализован он в виде плагина для Firefox&nbsp;=) </p> <p>https://addons.mozilla.org/en-<span class="caps">US</span>/firefox/addon/5817 </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c276Comment on SQL для самых маленьких by Ярослав Моталов2008-11-05T20:05:17Z2008-11-05T20:05:17ZЯрослав Моталов<p>Дело в том что iPhone использует так называемую песочницу, корневой каталог для каждой программы это ее домашний каталог (программы) больше никаких данных и путей программа видеть не может и небудет :) поэтому создавать таблицу надо или в самой программе или подключать. Доступ к данным другим осуществляется через фреймворки и то не все, например музыка, картинки да и то для каждого вида файлов отведен определенный&nbsp;размер. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c275Comment on SQL для самых маленьких by Alexander2008-11-04T17:57:39Z2008-11-04T17:57:39ZAlexander<p>Есть проблема с файлом&nbsp;базы. </p> <p>Файл базы уже подключен к&nbsp;проекту. </p> <ol> <li> sqlite3&nbsp;mydatabase.db </li> <li> создаем&nbsp;таблицу. </li> <li> закрываем. </li> <li> запускаем приложение где пробуем сделать select из этой&nbsp;базы. </li> <li> получаем ошибку о том что такой таблицы&nbsp;нет. </li> <li> копируем файл базы в папку /Users/&#8230;./Library/Application Support/iPhone&nbsp;Simulator/User/Applications/&#8230;../ </li> <li> запускаем снова&nbsp;приложение. </li> <li> все&nbsp;работает. </li> </ol> <p>чем это можно объяснить и как это можно&nbsp;исправить? </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c274Comment on SQL для самых маленьких by Evgeniy Krysanov2008-11-01T13:58:30Z2008-11-01T13:58:30ZEvgeniy Krysanov<p>Эта строчка есть, в applicationWillTerminate. База не закрывает до окончания работы&nbsp;программы. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c273Comment on SQL для самых маленьких by vinny2008-11-01T11:12:44Z2008-11-01T11:12:44Zvinny<p>Респект за статью<br /> В функции -(void)initializeDatabase (а может еще в каких-нибудь) в самом конце не хватает строчки sqlite3_close(database); или мне что-то мощно не по глазам&nbsp;:))) </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c272Comment on SQL для самых маленьких by Evgeniy Krysanov2008-10-31T14:27:20Z2008-10-31T14:24:30ZEvgeniy Krysanov<p>Спасибо. </p> <ol> <li> При отладке приложения на iPhone можно скачать содержимое папки Documents на компьютер через XCode. При работе в эмуляторе такие папки тоже создаются, но я не могу сейчас сказать где они лежат &mdash; под рукой нет мака.<br /> </li> <li> Консольный редактор есть. Визуального в XCode нет, но есть сторонние приложения:<br /> http://mac.softpedia.com/get/Developer-Tools/SQLite-Database-Browser.shtml<br /> http://sqlabs.net/sqlitemanager.php </li> </ol>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c271Comment on SQL для самых маленьких by hardwarrior2008-10-30T21:55:44Z2008-10-30T21:55:44Zhardwarrior<p>Отличная статья! Но есть 2 вопроса: 1) Можно ли как то получить доступ к базе в документсах на эмуляторе? 2) Есть ли в xcode визуальный браузер для SQLite баз. Хотя бы только на чтение, хотя бы не для всякого файлика-базы, а с эмулятора или девайса, на котором&nbsp;отлаживается))) </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c225Comment on SQL для самых маленьких by Val2008-09-22T14:00:33Z2008-09-22T14:00:33ZVal<p>Мерси. Бережёного Бог&nbsp;бережёт. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c224Comment on SQL для самых маленьких by Evgeniy Krysanov2008-09-22T13:58:31Z2008-09-22T13:58:31ZEvgeniy Krysanov<p>Если программа работает с нежелательными для разглашения данными, то лучше, конечно же, шифровать их перед помещением в&nbsp;базу. </p> <p>Папка Documents не является той папкой, которая доступна всем программам как в Windows. Эта папка создается индивидуально для каждого приложения и запись и чтение из нее ограничено приложением, которому она принадлежит (в прошлом или позапрошлом посте я описывал состав&nbsp;папок). </p> <p>Так что пользуясь легальным iPhone, доступ к этой базе извне получить не выйдет (ага, смешная фраза, учитывая недавние инструкции в сети как по Wi-Fi можно законнектиться к любому iPhone/iPod Touch и зайти под root). Но &#8220;человек сделал, человек и сломать сможет&#8221; и лучше&nbsp;перестраховаться. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c223Comment on SQL для самых маленьких by Val2008-09-22T13:44:54Z2008-09-22T13:41:58ZVal<p>Очень хороший пример. Спасибо. Хотелось бы обсудить другой вариант. Если база сама по себе &mdash; коммерческий продукт (нет аналогов). Поэтом её требуется как-то закрыть. Если поместить в папку &#8220;Документс&#8221;, то любой вытащит данные. Под виндоус я делал стандартную базу mdb, но шифровал данные внутри базы каким-то-там-многобитным алгоритмом. Успешно. А для мака такой же способ? Или можно как-то попроще? Если базу включить в папку проекта с &#8220;только чтением&#8221;, вероятно её смогут всё же вытащить и&nbsp;декомпилировать? </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c195Comment on SQL для самых маленьких by Evgeniy Krysanov2008-09-04T15:35:12Z2008-09-04T15:35:12ZEvgeniy Krysanov<blockquote><p>два разных класса содержали переменные, ссылающиеся на один и тот же&nbsp;NSArray </p> </blockquote><p>Не спорю, все зависит от&nbsp;ситуации. </p> <blockquote><p>Еще в паре мест в коде у тебя вместо дефиса стоит&nbsp;mdash </p> </blockquote><p>А это уже претензия к движку :) Хотя это не его &#8220;минус&#8221;, а скорее &#8220;плюс&#8221;. Он очень хорошо обрабатывает текст, чтобы тот выглядел валидным в браузере. Если не считать ссылок &#8220;Добавить пост в&#8221; в конце статьи, то весь блог полностью <span class="caps">XHTML</span>&nbsp;валидный. </p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c193Comment on SQL для самых маленьких by Алексей Блинов2008-09-04T13:40:41Z2008-09-04T13:40:41ZАлексей Блинов<p>Как всегда отличный урок.&nbsp;Спасибо. </p> <p>Насчет операции в get-методе. То, что ты прочел в общем и целом верно, но бывают и исключения. Что, если мне, к примеру, нужно, чтобы два разных класса содержали переменные, ссылающиеся на один и тот же NSArray, содержимое которого будет меняться в процессе, и обоим классам нужно эти изменения отслеживать? Тогда копирование точно не подойдет — нужен retain. Бывают также случаи, когда копирование – довольно дорогостоящая&nbsp;операция. </p> <p>Еще в паре мест в коде у тебя вместо дефиса стоит mdash. XCode их отображает одинаково, поэтому я долго думал, почему скопированный код выдает мне ошибку Unknown token.&nbsp;:) </p>