2013-07-24 4 views
0

У меня есть мое первое приложение в конвейере, и я точно знаю, как он будет работать; часть, которая ломает мой мозг, является базовой моделью данных в фоновом режиме.Как использовать основные модели данных для создания простого денежного приложения с одним или несколькими объектами

Предпосылка приложения - это запись, когда вы даете деньги кому-то и когда вы получаете деньги от этого человека или получаете/дарите подарок. Это не будет очень сложно, потому что оно предназначено для старшего поколения.

Принципы пользовательского интерфейса будут работать на основе вкладок, при этом первая вкладка будет «временной шкалой». Ссылка на то, кому вы дали и получили его на временной шкале.

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

I Я показываю это в ячейке с заголовком, субтитрами и, возможно, объединим случай и местоположение. Если пользователь нажимает на ячейку, он будет показывать все записи и транзакции между этим человеком и вами.

Пользователь также будет иметь возможность искать по названию события, имени человека, местоположению и/или дате.

Имея это в виду, у меня есть в голове, как составить карту Core Data Model, но это просто не имеет смысла.

Поскольку я хочу использовать NSFetchedResultsController, я понимаю, что я не могу выполнить выборки для нескольких объектов, но я мог бы использовать отношения. Здесь я теряюсь.

Одна из моих идей заключается в том, чтобы в качестве атрибутов иметь единую сущность с именемOfEvent, nameOfPerson, Date, Currency и Amount. Таким образом, в представлении временной шкалы я мог бы получить всю информацию для каждой ячейки.

Это в то же время не имеет для меня никакого смысла, потому что должно быть больше объектов. Например, я бы себе:

Случай (Entity) Имя (Атрибут) Местонахождение (Атрибут) Дата (Атрибут)

Person (Entity) Имя (Атрибут)

подарков (Entity) MoneyAmount (Атрибут) Валюта (Атрибут) Gift (Атрибут - опционально)

Действие (Entity) Учитывая (Атрибут - Bool) Получено (Атрибут - Bool)

Это моя другая идея, но кажется, что выборка каждой ячейки приложит много усилий, если это даже возможно. Для пользователя приложения никогда не будет больше 100 + ячеек, поэтому мы не говорим об изображениях и т. Д.

Я придерживаюсь такого подхода; я иду вперед и использую отношения? Если да, то?

Я потерян и любая помощь будет оценена!

Спасибо, Amit

+0

Эта короткая видео-лекция, вероятно, поможет вам обойти. http://www.youtube.com/watch?v=Mjdxjgdbf-k –

+0

Спасибо Хавьер. Я прошел этот курс онлайн, как и год спустя, и хотя мне очень полезно понять концепции CoreData, я очень доволен CoreData, но я просто не уверен, как эффективно отображать модель для этого конкретного приложения. – amitsbajaj

ответ

0

Вы на правильном пути!

Не беспокойтесь о сложности или объеме данных - Core Data может легко обрабатывать 100 000 записей легко на мобильном устройстве. С помощью связей вы можете получать и фильтровать эти данные очень быстро и эффективно.

Ваша модель данных может выглядеть следующим образом:

Person <---->> Transaction 
Transaction <<----------> Location 
Transaction <<----------> Occasion 
Transaction <-----------> Gift 

Person (name, birthday, etc) 
Transaction (createdDate, status [given, pending, canceled, etc.], category, type) 
Location (name, lat, lon, address...) 
Occasion (title, category) 
Gift (type, amount, currency, shortName, notes) 

Когда настроена правильно, вы можете сортировать и группа легко с помощью NSFetchedResultsController и вы можете получить доступ ко всем свойства легко с удобной точечной нотации, не имея беспокоиться о выборе, например

NSUInteger numberOfGifts = person.transactions.count; 

NSSet *nearLocations = [locations filteredSetUsingPredicate:locationPredicate]; 
NSSet *nearTransactions = [nearLocations valueForKeyPath:@"transaction"]; 

т.д.

Наслаждайтесь!

+0

Дорогой Муни, большое вам спасибо за ваш ответ, и это очень полезно. Это дает мне совершенно новый способ увидеть решение проблемы, поэтому я чрезвычайно благодарен. У меня есть несколько вопросов, на которые мне нужно следить - мои извинения за вопросы новичков! Будет ли связь между транзакцией и местоположением .. будет ли атрибут, называемый местоположением, и т. Д. В транзакции, которая связана с местоположением? Кроме того, в fetchrequest я бы использовал объект Transaction для приведения результатов, когда отношения вернулись к Person, Occasion и т. Д.? Извините, и спасибо! – amitsbajaj

+0

извините .. Mundi - немного опечатка! :) – amitsbajaj

+0

Вы в основном правы. Отношения имеют имена (например, атрибуты). Вы устанавливаете их в редакторе моделей. Убедитесь, что отношения «многие» имеют множественные имена (например, «транзакции») - это упрощает чтение. Да, вы можете получить транзакцию и фильтр с помощью NSPredicate, сортировать с помощью NSSortDescriptor, используя отношения как ключевые пути. Эти API не так сложны, и как только вы их освоите, они чрезвычайно эффективны. – Mundi

 Смежные вопросы

  • Нет связанных вопросов^_^