我有一個非常奇怪的問題,讓我很難過!核心數據沒有更新,更新的模型
我有,我剛剛加入了一些新的屬性到核心數據實體:
刪除 - 布爾 deletedDate - 日期
我有下面的代碼,即在按下上套這兩個值核心數據對象:
- (IBAction)deleteButtonInTable:(id)sender {
//Get the ID of the currently selected item in the table
NSInteger selected = [self.tweetTableView rowForView:sender];
//Create a predicate and fetch the objects from Core Data
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"approved == NO"];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"postDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
[request setPredicate:testForTrue];
[request setSortDescriptors:sortDescriptors];
[request setEntity:[NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:_managedObjectContext]];
//Setup the Request
[request setEntity:[NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:_managedObjectContext]];
//Assign the predicate to the fetch request
NSError *error = nil;
//Create an array from the returned objects
NSArray *fetchedObjects = [_managedObjectContext executeFetchRequest:request error:&error];
Tweet *selectedTweet = [fetchedObjects objectAtIndex:selected];
if (selectedTweet) {
selectedTweet.deleted = [NSNumber numberWithBool:TRUE];
selectedTweet.deletedDate = [NSDate date];
NSLog(@"%@",selectedTweet);
[self refreshTableView];
if (! self.tweetTableView){
NSLog(@"Tableview doesn't exist!!)");
}
[[self tweetTableView] reloadData];
[[self managedObjectContext] commitEditing];
[self saveAction:nil];
}
if ([self.autoWriteTweets isEqualToString:@"YES"]){
[self writeTweetsToXML];
[self saveAction:nil];
}
}
現在,如果我看在與一些場所xcode中該目的,我可以看到,因爲我通過該函數的對象的屬性改變,但我有一個表中顯示的數據源,這是f過濾只顯示刪除布爾設置爲true的對象,並沒有任何顯示在那裏。
現在,爲了讓事情更混亂我有出口的對象的數組功能:
-(void)writeTweetsToXML{
//Create new fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//Set new predicate to only fetch tweets that have been favourited
NSPredicate *filterFavourite = [NSPredicate predicateWithFormat:@"approved == YES"];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:self.exportSort ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
[request setSortDescriptors:sortDescriptors];
//Setup the Request
[request setEntity:[NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:_managedObjectContext]];
[request setResultType:NSDictionaryResultType];
//Assign the predicate to the fetch request
[request setPredicate:filterFavourite];
NSError *error = nil;
//Create an array from the returned objects
NSArray *tweetsToExport = [_managedObjectContext executeFetchRequest:request error:&error];
NSAssert2(tweetsToExport != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);
//NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
//NSString *path = [NSString stringWithFormat:@"%@/tweets.xml", documents];
NSString *writeerror;
if(tweetsToExport) {
NSString * exportLocationFull = [[NSString alloc]initWithFormat:@"%@/tweets.xml",self.exportLocation];
BOOL success = [tweetsToExport writeToFile:exportLocationFull atomically:YES];
NSLog(@"Write Status = %d to %@", success, exportLocationFull);
}
else {
NSLog(@"%@",writeerror);
}
}
現在,當我看到導出的文件,兩件事情發生這是奇怪!
首先,我所看到的有它的刪除值設置爲true的對象,與價值出口爲0
其次,deletedDate屬性不出口可言,每一個,儘管它的核心是數據模型。我無法看到這種情況發生,因爲我沒有對導出進行特定的過濾。
這就像一個getter/setter的地方是壞的,但我已經檢查了類文件,一切都是因爲它應該是,並設置爲@dynamic。
任何幫助將不勝感激,因爲我有點失落至於到底是怎麼回事。
人們已經警告過我關於核心數據的怪癖,但這簡直太古怪了!
乾杯
加雷
注1
順便說一句,我使用從所述第一部分中的確切相同的代碼來設置該過濾並似乎對象的其他屬性工作正常!
比較http://stackoverflow.com/questions/16000242/core-data-nspredicate-predicatewithblock-and-predicatewithformat-in-parent-child - 你不應該調用屬性「刪除」。 –
嗨馬丁,這就是它,DOH !!!!!你可以發佈它作爲答案,我會選擇它。不能相信我花了多長時間! –