
Александр
04.02.2017
18:06:43
Ребзя есть кто пилил Mapping в Realm используя Object Mapper ?

Serge
04.02.2017
18:22:09

Alex
04.02.2017
18:31:26
#whois
Всем привет. Я iOS developer из Киева. Наткнулся на группу в интернетах, решил посмотреть, что и как.

Александр
04.02.2017
18:31:38
Да
Штука следующая, парсинг я сделал. Меня интересует вложенные элементы в json’е которые приходят.
Их я раньше делал через ListTransformation типа такого:
opening_hours <- (map["opening_hours"], ListTransform<OpeningHoursModel>())
Сейчас я получаю значения в массиве:
"neutral": 1,
"com": [
"lalalalalalalalalala"
],
и вот то что в com - lalalala оно не забирается

Google

Александр
04.02.2017
18:32:04
как я понял не забирается потому что приходит как массив - в квадратных скобках
вернее оно забирается но маппинг не происходит, в realm для хранения строк я создал элемент StringObject, и хочу хранить эти lalalalaa как List<StringObject>
Проблема в том что func map , у объекта StringObject - не запускается
максимум что я нашел - пишут самописную функцию не ListTransform а ListArray, либо вот такое решение - http://stackoverflow.com/questions/37609700/map-single-array-in-database-with-objectmapper-and-realm
но чет у меня не рсабатывает

Serge
04.02.2017
18:38:32
@denisenkoaj https://github.com/zendobk/RealmMapper
Насколько я понял это должно помочь

Александр
04.02.2017
18:51:38

Булат
04.02.2017
20:50:25
https://github.com/jakenberg/ObjectMapper-Realm вот эта либа официально в readme ObjectMapper’а рекомендуется
но ни та, ни другая, насколько я помню
не решит проблему
потому что List стрингов нельзя создавать
то есть там по-любому костыль что-то вроде:
class RealmString {
value: String
}
…
// в классе где вам нужен массив стрингов
lalalaStrings: List<RealmString>
// трансформа для List<RealmString>, примеры есть в гитхабе на странице ObjectMapper’а
RealmStringListTransform {}

Google

Vladislavs
04.02.2017
21:02:03
не кривых решений нет вроде
я что-то подобное делал
http://stackoverflow.com/questions/31724595/storing-an-array-of-strings-using-realms-rlmarray

Александр
04.02.2017
21:12:21
Я короч кастомизирпл функцию map
Вручную разобрал содержимое этого map'а который в инит объекта передается и таки вынул значение
func mapping(map: Map) {
// commentary <- map["com"] - хотелось бы так
for item in map.JSON {
if item.key == "com" {
var stringForArray = StringObject()
if let object = item.value as? NSArray {
if object.count > 0 {
stringForArray.value = (object.firstObject! as AnyObject).debugDescription!
self.commentary.append(stringForArray)
}
}
}
я хз как это красивей упаковать но зато так работает

Булат
04.02.2017
21:16:21
вынуть то фигня
для этого есть Transform
сторишь потом как?

Vladislavs
04.02.2017
21:16:38

Александр
04.02.2017
21:16:44

Булат
04.02.2017
21:16:52
примеры есть
в гитхабе
почитай

Александр
04.02.2017
21:16:57
я тут затрахался уже тестить)))

Булат
04.02.2017
21:16:59
Transform

Александр
04.02.2017
21:17:01
уже все пересмотрел)
ArrayTransform?

Булат
04.02.2017
21:17:08
там есть например URLTransform

Google

Александр
04.02.2017
21:17:10
не завелось)

Булат
04.02.2017
21:17:17
вот делаешь то же самое, только для своего

Александр
04.02.2017
21:17:20
URL ?

Булат
04.02.2017
21:17:29
я тебе пример привожу
она как раз нужна для конвертации нормальной
чтобы не городить говно в mapping
Ты не там проблему ищешь
Ты думаешь, что проблема - нормально считать JSON
а проблема - нормально сохранить массив строк в реалме

Александр
04.02.2017
21:19:24

Булат
04.02.2017
21:19:33
ало
urltransform просто для примера

Александр
04.02.2017
21:19:59
ало да где прочитать то про него?)
а все в objectmapper’е чето нашел

Булат
04.02.2017
21:20:33
вот там смотришь как они сделали для транформации X в Y
и делаешь для своих нужд
а как у тебя хранятся строки в итоге эти?
если ты их просто в стандартный массив засунул, то они у тебя не будут в реалме работать как toMany

Александр
04.02.2017
21:29:20

Google

Александр
04.02.2017
21:29:31
и нормально вытаскиваются

Булат
04.02.2017
21:29:51
так норм)
ну в смысле, говно конечно ссаное, но единственный выход

Александр
04.02.2017
21:30:17
угу
нормас терпимо))

Булат
04.02.2017
21:31:00
ну короче надо StringObjectListTransform сделать, чтобы говно не городить в mapping
по сути просто перенести тот код, который у тебя есть в mapping
в отдельную структурку
которая конформит Transform


-_-
04.02.2017
23:47:54
Народ, подскажите, плиз. Допустим, у нас есть TableViewController со списком чего-либо. Товаров там или чатов. Нам по нажатию ячейки надо пушнуть какой-нибудь DetailViewController, который покажет полную инфу. Чтобы DetailViewController знал, что именно показывать, нам надо ему это передать (в ините, поставить свойство, не суть как именно).
Если юзать storyboard и segue, то, получается, мы в didSelectRowAtIndexPath просим сториборд выполнить segue, а в prepareForSegue смотрим ее идентификатор, убеждаемся, что это нужная нам (т.к. их может быть несколько), берем контроллер, ставим данные (причем только через метод, т.к. контроллер уже создан, как я понимаю). То есть в одном методе просим создать сделать segue, в другом проверяем id и только там ставим.
Вопрос. Это считается проще, чем в didSelectRowAtIndexPath сразу написать что-то вроде
DetailViewController *detail = [DetailViewController alloc] initWithData:someData[indexPath.row]];
[self.navigationController pushViewController:detail animated:YES];
?


F
05.02.2017
00:57:26
Народ, подскажите, плиз. Допустим, у нас есть TableViewController со списком чего-либо. Товаров там или чатов. Нам по нажатию ячейки надо пушнуть какой-нибудь DetailViewController, который покажет полную инфу. Чтобы DetailViewController знал, что именно показывать, нам надо ему это передать (в ините, поставить свойство, не суть как именно).
Если юзать storyboard и segue, то, получается, мы в didSelectRowAtIndexPath просим сториборд выполнить segue, а в prepareForSegue смотрим ее идентификатор, убеждаемся, что это нужная нам (т.к. их может быть несколько), берем контроллер, ставим данные (причем только через метод, т.к. контроллер уже создан, как я понимаю). То есть в одном методе просим создать сделать segue, в другом проверяем id и только там ставим.
Вопрос. Это считается проще, чем в didSelectRowAtIndexPath сразу написать что-то вроде
DetailViewController *detail = [DetailViewController alloc] initWithData:someData[indexPath.row]];
[self.navigationController pushViewController:detail animated:YES];
?
смотря что тебе проще)
если ты в сторибоарде свяжешь ячейку и контроллер, то можно не просить ничего выполняться, оно само
и обойтись без идентификатора
но в больших проектах сторибоарды либо вообще не юзают, либо они побиты, так что чаще всего имхо ручками пушат в навигейшн


-_-
05.02.2017
01:06:20
Мне просто гораздо очевиднее когда в одном месте и создается сам контроллер, и ставятся данные, и там же он пушится

F
05.02.2017
01:07:05
segue - это абстракция интерфейс билдера, их не существует программно полноценно
ну так и делай тогда)

-_-
05.02.2017
01:08:18
Я думал, может что не так делаю. Вроде сториборд, все дела, чтобы было проще да нагляднее

F
05.02.2017
01:09:04
сторибоард больше для прототипирования, "правильнее" кодом делать всё)

-_-
05.02.2017
01:12:25
Мне это напоминает блоки наоборот. В смысле появились вот в iOS 4 блоки, некоторые вещи стало делать очевиднее, потому что не паришься с методом делегата где-то в другом месте в коде, а пишешь все разу, не нужно скакать туда-сюда

Google

-_-
05.02.2017
01:12:36
А тут к этому вернулись

F
05.02.2017
01:14:42
тут не подскажу, по мне так никто никуда не возвращался в этом вопросе, так давно ведь уже

-_-
05.02.2017
01:16:30
Ну это я просто недавно глянул нормально на сториборды)
Идея для пода, компонент который добавит блок настройки segue.destinationViewController к performSegueWithIdentifier
Хех. Ну понятно
https://habrahabr.ru/post/275783/

F
05.02.2017
01:34:14
а я с пингером сижу
почему-то нет нормального)
дефолтный яблочный не умеет сразу несколько хостов пинговать
причем хз почему, вроде должен

Olexii
05.02.2017
06:25:10
Почему мы хранм важные данные в keychain. И насколько небезопасно в nsuserdefaults, если у нас sandbox?

q210
05.02.2017
07:03:14
nsuserdefaults - нешифованный plist который можно прочитать либо в любом файл менеджере после джейлбрейка, либо с компьютера (если у приложения стоит iTunes File Sharing с iOS 8.3, и без ограничений до этого через iFunBox)
и поменять в нем все, что угодно, ессно

Sergey
05.02.2017
07:05:05
ну рут не в счет. рут - задание под здвездочкой
или джейл!=рут? пойду гляну, что ли

-_-
05.02.2017
07:14:30

F
05.02.2017
07:58:57
Делал кто пинговать несколько хостов одновременно?

Дмитрий
05.02.2017
08:28:39