2010-11-14 3 views
4

Я очень новичок в CoreData и в своем приложении для iPhone. Я хочу знать, как сохранить какой-то текст, а затем загрузить его обратно. Но трюк заключается в том, что он загружает его, когда дата в UIDatePicker такой же, как когда я его сохранил, как календарь.Сохранить и загрузить данные - CoreData

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

ОБНОВЛЕНИЕ: Спасибо за ответы, особенно за образец кода. Однако у меня есть некоторые проблемы, которые понимают, как это сочетается, простите меня. Я хочу узнать, как это работает, но заставить его работать в среднем будет действительно полезно.

Я понимаю некоторые из этих ошибок, только исправление их в правильном порядке - это моя проблема. Надеюсь, ты поможешь.

Предположительно, я положил ваш первый фрагмент кода в законченный метод редактирования (сохраняя при выходе из текстового поля), а затем второй фрагмент в методе с измененной датой (загрузка при изменении даты)?

Этот код использует ли оно имена объектов и свойств? Как именно мне нужно настроить файл xcdatamodel? Нужно ли мне использовать этот код, или это просто показывает, какие объекты и свойства мне нужны?

DatedText{ 
    savedText:String 
    dateSaved:Date 
} 

Эта линия говорит: 'мо' не декларируется: (ИСПРАВЛЕНО)

newDatedText=mo=[NSEntityDescription insertNewObjectForEntityForName:@"DateText" 
inManagedObjectContext:theManagedObjectContext]; 

Предположительно ниже 'SOMETEXT' является текст, который я хочу сохранить? А 'aDateObject' - это дата моего UIDatePicker?

[newDatedText setValue:someText forKey:@"savedText"]; 
    [newDatedText setValue:aDateObject forKey:@"dateSaved"]; 

Запрос члена 'МОС' в чем-то не структуры или объединения:

NSEntityDescription *testEntity=[NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.moc]; 

'targetDate' Что (необъявленная)? Дата UIDatePicker снова?

NSPredicate *pred=[NSPredicate predicateWithFormat:@"dateSaved==%@", targetDate]; 

Запрос члена «МОС» в чем-то это еще не структуру или объединение:

NSArray *fetchedObjs=[self.moc executeFetchRequest:theFetch error:&fetchError]; 
+0

«newDatedText = mo =' был опечаткой в ​​моем ответе. Теперь исправлено. – TechZen

+0

Хорошо, подумал, что это возможно. Но Im все еще не понимает ничего: http://b.imagehost.org/0718/Screen_shot_2010-11-17_at_22_59_14.png –

+1

Вы пытаетесь скопировать и вставить пример кода непосредственно в ваш проект. Это не сработает. У нас нет доступа к вашему проекту и поэтому не может создавать имена переменных, которые соответствуют тем, которые вы назначили. Нам просто нужно использовать такие имена, как 'DatedText' или' targetDate'. Вы должны изменить измененные имена переменных на те, которые будут соответствовать вашему проекту. – TechZen

ответ

3

Для начала вам понадобится модель данных, отражающая то, что вы хотите сохранить, в данном случае, некоторый текст и дату.Итак:

DatedText{ 
    savedText:String 
    dateSaved:Date 
} 

Чтобы создать новый DatedText объект (без пользовательского класса) делать:

NSManagedObject *newDatedText; 
newDatedText=[NSEntityDescription insertNewObjectForEntityForName:@"DateText" inManagedObjectContext:theManagedObjectContext]; 
[newDatedText setValue:someText forKey:@"savedText"]; 
[newDatedText setValue:aDateObject forKey:@"dateSaved"]; 

NSError *saveError=nil; 
[theManagedObjectContext save:&saveError]; 
if (saveError!=nil) { 
    NSLog(@"[%@ saveContext] Error saving context: Error=%@,details=%@",[self class], saveError,saveError.userInfo); 
} 

Чтобы получить DatedText объект с определенной датой вы создаете выборки следующим образом:

NSFetchRequest *fetch=[[NSFetchRequest alloc] init]; 
NSEntityDescription *testEntity=[NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.moc]; 
[fetch setEntity:testEntity]; 
NSPredicate *pred=[NSPredicate predicateWithFormat:@"dateSaved==%@", targetDate]; 
[fetch setPredicate:[NSArray arrayWithObject:pred]]; 

NSError *fetchError=nil; 
NSArray *fetchedObjs=[theManagedObjectContext executeFetchRequest:theFetch error:&fetchError]; 
if (fetchError!=nil) { 
    NSLog(@" fetchError=%@,details=%@",fetchError,fetchError.userInfo); 
    return nil; 
} 

fetchedObjs теперь будет содержать массив из всех DatedText объектов с такими же savedDate, что и targetDate.

+0

Спасибо за отзыв и отличный образец кода! У меня есть несколько вопросов и отредактировано мое оригинальное сообщение, не могли бы вы взглянуть, пожалуйста? –

+0

Проведя так много времени, глядя на другой код и плати за него, он имеет гораздо больше смысла, возвращаясь к этому, однако одно дело об объекте управляемого объекта. От куда это? Мне просто нужно объявить его? Или это сложнее? И «theFetch» ​​- это не только то, что вы объявили как «выборка»? –

+0

Используйте один из проектов шаблона Xcode для создания основного приложения на основе данных. В классе делегирования приложения он предоставит методы, которые покажут вам, как настроить основной стек данных. – TechZen

2

Есть много ресурсов о Core Data, вы можете следовать следующим ссылкам, чтобы узнать его. http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html Учебное пособие по основным данным для iOS: это действительно здорово, официальный документ, простой в освоении, с загружаемым исходным кодом. Any good guide about iPhone Core Data? Кто-то задал тот же вопрос раньше, вы можете взглянуть.

+0

Это проблема с предоставлением ссылок вместо примера кода. Первая ссылка уже сломана. – Houman

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