這是簡單的,但我似乎無法找到問題。新元素沒有被添加到數據庫中,我在代碼中沒有收到任何錯誤。iPhone - 添加核心數據問題
這裏是add方法
- (void) addPressed:(NSNotification *) message
{
// Insert a new record in the database
Track *track2 = [NSEntityDescription insertNewObjectForEntityForName: @"Track" inManagedObjectContext: managedObjectContext];
[managedObjectContext save: &error];
tracks = [self fetchTracks];
// Insert a new item in the table's data source
[tracks insertObject: track2 atIndex: 0];
// Insert a new row in the table
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection: 0];
addTrack.track = [tracks objectAtIndex: indexPath.row];
NSLog(@"here");
[[NSNotificationCenter defaultCenter] postNotificationName:@"choosePressed" object:self];
}
附加被稱爲它發送一個消息到用戶拿起從mpmediapicker歌曲另一個視圖控制器之後,然後點擊保存按鈕,其選擇該方法
- (void) finishedEditing
{
if(start.text.length == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: @"You must fill out all fields" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
alert.tag = 1;
[alert show];
[alert release];
}
else if(duration.text.length == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: @"You must fill out all fields" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
alert.tag = 1;
[alert show];
[alert release];
}
else if(name.text.length == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: @"You must fill out all fields" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
alert.tag = 1;
[alert show];
[alert release];
}
else if(songLabel.text.length == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: @"You must select a song" delegate: self cancelButtonTitle: @"OK" otherButtonTitles: nil];
alert.tag = 1;
[alert show];
[alert release];
}
else
{
if (repeat)
{
track.title = NULL;
track.name = NULL;
repeat = NO;
}
else
{
songLabel.text = @"";
artistLabel.text = @"";
[self viewWillDisappear: YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
track.name = name.text;
track.duration = duration.text;
track.startloc = start.text;
track.title = [song valueForProperty:MPMediaItemPropertyTitle];
NSManagedObjectContext *context = track.managedObjectContext;
NSError *error = nil;
[context save: &error];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myTraxsTab" object:self];
}
}
}
我使用NSFetchRequest而不是fetchedResults控制器。繼承人的代碼。
request = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES];
sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
request.sortDescriptors = sortDescriptors;
[sortDescriptor release];
error = nil;
entity = [NSEntityDescription entityForName: @"Track" inManagedObjectContext: managedObjectContext];
request.entity = entity;
UPDATE
好了,所以我添加了一行打印陣列else語句這裏
else
{
songLabel.text = @"";
artistLabel.text = @"";
[self viewWillDisappear: YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
track.name = name.text;
track.duration = duration.text;
track.startloc = start.text;
track.title = [song valueForProperty:MPMediaItemPropertyTitle];
NSManagedObjectContext *context = track.managedObjectContext;
NSError *error = nil;
[context save: &error];
NSLog(@"array: %@", tracks);
[[NSNotificationCenter defaultCenter] postNotificationName:@"myTraxsTab" object:self];
}
而這正是它的打印。我不知道我缺少什麼。它讓我發瘋。我明顯增加了名稱,持續時間和開始標籤的值。
array: (
"<Track: 0x136d80> (entity: Track; id: 0x13a120 <x-coredata://9D789618-64C1-40BF-9F15-BA6A3EA715D3/Track/p7> ; data: {\n duration = nil;\n name = nil;\n startloc = nil;\n title = nil;\n})"
)
你可以發佈你的數據模型嗎?文字很好,如果不是太麻煩的話,也可以是截圖。我假設你有一個fetchedResultsController連接到你的tableViewController - 是這種情況?如果沒有,我們可能需要從那裏開始:-) – 2012-02-11 17:18:08
使用NSFetchRequest而不是fetchedResults控制器。繼承人的代碼。 request = [[NSFetchRequest alloc] init]; NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@「name」ascending:YES]; sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor,nil]; request.sortDescriptors = sortDescriptors; [sortDescriptor release]; error = nil; entity = [NSEntityDescription entityForName:@「Track」inManagedObjectContext:managedObjectContext]; request.entity = entity; – user1034642 2012-02-11 17:41:50
你怎麼知道你沒有儲蓄?僅僅因爲新的項目沒有出現在表格中?你用'sqlite3'命令行工具或其他SQLite數據庫瀏覽器檢查過嗎? – Mundi 2012-02-11 19:27:37