Обсуждение Objective C

DIY

Самец :)
Никого нового не появилось?
Я тут поднаторел в нем :) за полгода-то. Могу помочь кому-нить чем-нить
 

    MIDAS

    очки: 151
    ObjectivC вопрос есть

MIDAS

Ословед
Ну вот есть такой вопрос: от сервака приходит XML. Все элементы парсятся и запоминаются в переменные нормально. Кроме элемента <main>. Ибо в нём хранится текст с HTML-разметкой.
Каким образом можно и этот кусок в виде обычного текста запомнить в переменную NSString'овского типа? И, что потом самое -то главное, вывести в текстовое поле, ну или ещё куда, уже с учётом HTML тегов.
 

DIY

Самец :)
Ты пользуешься библиотекой или встроенным парсером?
Я встроенным почти не пользовался, сразу перешел на TBXML - очень удобная штука. <main> - rootXMLElement. И из него нормально читаются атрибуты, текст и прочее.
html разметку нормально ("из коробки") отображает только UIWebView. Создаешь его, задаешь рамку, делаешь loadHTMLString и радуешься.

Можно использовать NSAttributedString, и вручную спарсить все стили, задаваемые в разметке. Но этот класс введен с ios 6.
 

MIDAS

Ословед
Ты пользуешься библиотекой или встроенным парсером?
Я встроенным почти не пользовался, сразу перешел на TBXML - очень удобная штука. <main> - rootXMLElement. И из него нормально читаются атрибуты, текст и прочее.
html разметку нормально ("из коробки") отображает только UIWebView. Создаешь его, задаешь рамку, делаешь loadHTMLString и радуешься.

Можно использовать NSAttributedString, и вручную спарсить все стили, задаваемые в разметке. Но этот класс введен с ios 6.

Пользуюсь встроенным, ибо TBXML не сохраняет всё что придёт с сервака в локальный файл. Во всяком случае я чего т не смог так сделать.

Но этот вопрос уже худо-бедно решён. Проблема другая есть.
На одной из вью разместил скроллвью, в него кинул поля формы и кнопку отправить.
Когда в эмуляторе запускаю - клавиатура текстовая появляется, а вот исчезать не хочет, а скролвью почему-то не работает. Но даже если это я обойду (сделаю просто вьюху TableView), то есть другой косяк:
пустая форма отправляется отлично. А вот стоит ввести данные - так почему-то крашится. Данные там такие: 4 текстовых поля под фио, мыло итд. Я думаю что косяк в мыле (мало ли как он эту @ распознает когда я в общую строку их склеиваю). Какие есть мысли на этот счёт?
 

DIY

Самец :)
при клике на скроллвью делай resignFirstResponder, чтобы убрать фокус с текстового поля. Тогда и клавиатура исчезнет.
Скроллвью не работает, потому что ты его фрейм не переопределил после появления клавы. Для этого подписывайся на событие KeyboardDidAppear (как-то так) и меняй фрейм.
Выпадает при отправке непустой формы - тут скорее всего косяк либо с неправильными указателями, либо с неправильными типами. Без кода сложно что-то сказать.
Может попробовать разобраться сам. Заходи в список Breakpoints, жми на плюсик и добавляй exceptional breakpoint. Все, приложение будет останавливаться перед возникновением exception'а, подсветив тебе бажную строку.
 

MIDAS

Ословед
при клике на скроллвью делай resignFirstResponder, чтобы убрать фокус с текстового поля. Тогда и клавиатура исчезнет.
Скроллвью не работает, потому что ты его фрейм не переопределил после появления клавы. Для этого подписывайся на событие KeyboardDidAppear (как-то так) и меняй фрейм.
Вот с этим можно подробнее?
 

MIDAS

Ословед
Ok. А про конкатенацию строк можешь объяснить?

Код:
NSString *strurl = @"http://server.ru/server.php?GetFav=1";
    NSString *amper=@"&"; 
   for(int i=0; i<[array count]; i++)
 {        NSString *parturl=[NSString stringWithFormat:@"%@id[]=%@", amper, [array objectAtIndex:i]];        NSLog(@"%@", parturl);
        strurl = [strurl stringByAppendingString:parturl];                    }; 
   NSLog(@"%@", strurl); 
   [strurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:strurl];

Необходимо через УРЛ передать несколько GET параметров. Для формирования урла и служит кусок выше.
Однако в логе получаю вот это:


Код:
2013-04-01 19:35:42.589 RRS[1443:207] &id[]=3
2013-04-01 19:35:42.591 RRS[1443:207] &id[]=9
2013-04-01 19:35:42.594 RRS[1443:207] &id[]=8
2013-04-01 19:35:42.594 RRS[1443:207] [URL]http://server.ru/server.php?GetFav=1&id[/URL][]=3
&id[]=9
&id[]=8
2013-04-01 19:35:42.612 RRS[1443:207] Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x6a2dae0 {NSUnderlyingError=0x6a2e0b0 "bad URL", NSLocalizedDescription=bad URL}

И так всегда, когда параметров больше 1. Т.е. http://server.ru/server.php?GetFav=1 проходит прекрасно, а вот при конкатенации откуда-то в местах скливания берутся скрытые символы новой строки, и имеем badURL. хотя в браузере когда пишу строку - все отлично проходит.
 

MIDAS

Ословед
Вопрос решён.

Код:
[COLOR=#000000]  [/COLOR][COLOR=#660066]NSString[/COLOR][COLOR=#000000] [/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000]newString [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#000000] [/COLOR][COLOR=#666600][[[/COLOR][COLOR=#000000]strurl componentsSeparatedByCharactersInSet[/COLOR][COLOR=#666600]:[[/COLOR][COLOR=#660066]NSCharacterSet[/COLOR][COLOR=#000000] newlineCharacterSet[/COLOR][COLOR=#666600]]][/COLOR][COLOR=#000000] componentsJoinedByString[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]""[/COLOR][COLOR=#666600]];
[/COLOR]
 

MIDAS

Ословед
Создал Master Detail Ipad приложение. В мастере выводятся имена, в детейл соответственно более подробная инфа.

Что нужно: чтобы при клике на строку таблицы в Мастере обновлялась вьюха Detail (причем с анимацией)

Мой код:


Код:
[COLOR=#666600]-[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000088]void[/COLOR][COLOR=#666600])[/COLOR][COLOR=#000000]tableView[/COLOR][COLOR=#666600]:([/COLOR][COLOR=#660066]UITableView[/COLOR][COLOR=#666600]*)[/COLOR][COLOR=#000000]tableView didSelectRowAtIndexPath[/COLOR][COLOR=#666600]:([/COLOR][COLOR=#660066]NSIndexPath[/COLOR][COLOR=#666600]*)[/COLOR][COLOR=#000000]indexPath
[/COLOR][COLOR=#666600]{[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#660066]FCDetailViewController[/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000]detailViewController [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[[[/COLOR][COLOR=#660066]FCDetailViewController[/COLOR][COLOR=#000000] alloc[/COLOR][COLOR=#666600]][/COLOR][COLOR=#000000] initWithNibName[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"FCDetailViewController_iPad"[/COLOR][COLOR=#000000] bundle[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000088]nil[/COLOR][COLOR=#666600]][/COLOR][COLOR=#000000] autorelease[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#660066]NSDictionary[/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000]nameItem [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[/COLOR][COLOR=#000000]name objectAtIndex[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]indexPath[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]row[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    detailViewController[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]idname [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[/COLOR][COLOR=#000000]nameItem objectForKey[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"numbername"[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    detailViewController[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]title[/COLOR][COLOR=#666600]=[[/COLOR][COLOR=#660066]NSString[/COLOR][COLOR=#000000] stringWithFormat[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"Name: #%@"[/COLOR][COLOR=#666600],[[/COLOR][COLOR=#000000]nameItem objectForKey[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"numbername"[/COLOR][COLOR=#666600]]];[/COLOR][COLOR=#000000]    
    [/COLOR][COLOR=#666600][[/COLOR][COLOR=#000088]self[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]modalViewController release[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]    
[/COLOR][COLOR=#666600]}[/COLOR]

при клике не проиходит ровным счетом ничего.
Если после задания title дописать

Код:
[COLOR=#666600][[/COLOR][COLOR=#000088]self[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]navigationController pushViewController[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]detailViewController animated[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]YES[/COLOR][COLOR=#666600]];[/COLOR]
Как я понимаю нужно вот эту строку как-то модифицировать чтобы пуш происходил не в текущее окно (self) а в соседнее...
 

DIY

Самец :)
Создал Master Detail Ipad приложение. В мастере выводятся имена, в детейл соответственно более подробная инфа.

Что нужно: чтобы при клике на строку таблицы в Мастере обновлялась вьюха Detail (причем с анимацией)

Мой код:


Код:
[COLOR=#666600]-[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000088]void[/COLOR][COLOR=#666600])[/COLOR][COLOR=#000000]tableView[/COLOR][COLOR=#666600]:([/COLOR][COLOR=#660066]UITableView[/COLOR][COLOR=#666600]*)[/COLOR][COLOR=#000000]tableView didSelectRowAtIndexPath[/COLOR][COLOR=#666600]:([/COLOR][COLOR=#660066]NSIndexPath[/COLOR][COLOR=#666600]*)[/COLOR][COLOR=#000000]indexPath
[/COLOR][COLOR=#666600]{[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#660066]FCDetailViewController[/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000]detailViewController [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[[[/COLOR][COLOR=#660066]FCDetailViewController[/COLOR][COLOR=#000000] alloc[/COLOR][COLOR=#666600]][/COLOR][COLOR=#000000] initWithNibName[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"FCDetailViewController_iPad"[/COLOR][COLOR=#000000] bundle[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000088]nil[/COLOR][COLOR=#666600]][/COLOR][COLOR=#000000] autorelease[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#660066]NSDictionary[/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000]nameItem [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[/COLOR][COLOR=#000000]name objectAtIndex[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]indexPath[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]row[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    detailViewController[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]idname [/COLOR][COLOR=#666600]=[/COLOR][COLOR=#666600][[/COLOR][COLOR=#000000]nameItem objectForKey[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"numbername"[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]
    detailViewController[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]title[/COLOR][COLOR=#666600]=[[/COLOR][COLOR=#660066]NSString[/COLOR][COLOR=#000000] stringWithFormat[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"Name: #%@"[/COLOR][COLOR=#666600],[[/COLOR][COLOR=#000000]nameItem objectForKey[/COLOR][COLOR=#666600]:@[/COLOR][COLOR=#008800]"numbername"[/COLOR][COLOR=#666600]]];[/COLOR][COLOR=#000000]    
    [/COLOR][COLOR=#666600][[/COLOR][COLOR=#000088]self[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]modalViewController release[/COLOR][COLOR=#666600]];[/COLOR][COLOR=#000000]    
[/COLOR][COLOR=#666600]}[/COLOR]

при клике не проиходит ровным счетом ничего.
Если после задания title дописать

Код:
[COLOR=#666600][[/COLOR][COLOR=#000088]self[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]navigationController pushViewController[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]detailViewController animated[/COLOR][COLOR=#666600]:[/COLOR][COLOR=#000000]YES[/COLOR][COLOR=#666600]];[/COLOR]
Как я понимаю нужно вот эту строку как-то модифицировать чтобы пуш происходил не в текущее окно (self) а в соседнее...
Ищи что-то типа self.detailViewController
Я сам с master-detail приложениями на айпадах не работал, не могу сказать наверняка
 

MIDAS

Ословед
Да уже всё) Решилось просто по принципу "Не работает? К чёрту!"
Сделал простой NavigationController и рстягиваю его на всю площадь экрана (тобишь и айфон и айпэд одинаковы).
Ещё бы с ячейками таблицы этот фокус работал. А то сейчас приходится делать 4 кастомных шаблона для ячеек: айфон-книга, айон-альбом, апад-книга, айпад-альбом.
Или я где то просто упускаю галочку "растягивать на всё поле..."
 
Сверху