1

我甚至不知道該怎麼稱呼這個問題。更不用說如何搜索解決方案。iPhone UITableView古怪

我正在使用Xcode 4. 我正在使用CoreData。 我有標籤欄應用程序。 4個不同的標籤。 這是模擬器的問題。

兩個選項卡的根表視圖由一組控制器填充。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSUInteger row = [indexPath row]; 

SecondViewController *nextController = [self.medControllersArray objectAtIndex:row]; 
[self.navigationController pushViewController:nextController 
            animated:YES]; 
} 

當向下鑽取到其中一個控制器時,您可以看到另一個表格視圖。

當在下一個控制器的表視圖中點擊添加按鈕並添加一個名稱或其他來填充表視圖時,如果您轉到另一個控制器的表視圖,它會使用相同的信息和其他表視圖填充。

因爲我得到了臭名昭著的+entityForName錯誤

我在viewDidLoad中添加此

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(MIT2AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext_: %@", managedObjectContext); 
} 

在應用程序的委託方法添加此application:didFinishLaunchingWithOptions

ViewController *viewController = [[ViewController alloc] init]; 
NSManagedObjectContext *context = [self managedObjectContext]; 
if (!context) { 
    NSLog(@"\nCould not create *context for self"); 
} 

viewController.managedObjectContext = context; 

我這樣做是爲每個下一個視圖控制器我已經和視圖的兩個選項卡的根視圖未被填充控制器和數組。

當下一個視圖被推我也得到在控制檯這樣的警告:

After managedObjectContext_: <NSManagedObjectContext: 0x5934e10> 

我希望這一切纔有意義。而且有人可以指引我正確的方向。

在此先感謝。

回答

0

謝謝上帝!這是成功的。我在我的數據模型中犯了一個新手Core Data的錯誤(我敢肯定)。

我得到的,因爲這個錯誤在模擬器上重複(以及電話):

在數據模型中我有藥物和所有的屬性,等等,等等,等等的實體。我創建了一個班級,決定使用這個班級共享3個桌子的視圖,當前的藥物,過去的藥物和過敏。這樣做自然沒有區別。我回去了,創建了一個新模型,合併了yada,yada,併爲當前,過去和過敏添加了3個新實體。然後將父實體設置爲主醫療實體並抽取父母。當我再次經歷並將代碼重新編寫到新實體時。一切正常!沒有更多的重複。那麼,真的,沒有更多的三重奏。

對於我得到的警告(沒有錯誤,應用程序仍然構建,沒有崩潰,您仍然可以通過它)對託管對象上下文執行操作。爲了消除臭名昭着的+ entityForName錯誤,我嘗試了一些我在書或Apple中看到的東西。我進口的AppDelegate到我的每一個表,並在fetchedResultsController這樣做:

- (NSFetchedResultsController *)fetchedResultsController { 
MIT2AppDelegate *mit = [[MIT2AppDelegate alloc] init]; 

if (fetchedResultsController != nil) { 
    return fetchedResultsController; 
} 
    //if (fetchedResultsController == nil) { 
    // Create the fetch request for the entity. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 


    // the entity name 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Allergies" inManagedObjectContext:mit.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

雖然返工我試過的代碼是什麼tomasBULL推薦: How can I solve NSInternalInconsistencyException', reason: '+entityForName: fail report

這就是錯誤來自何處。所以我回到以前和現在的樣子,沒有更多的錯誤。

我做這在我的AppDelegate managedObjectModel

- (NSManagedObjectModel *)managedObjectModel{ 
    if (managedObjectModel != nil){ 
     return managedObjectModel; 
    } 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"MIT2ver 3" ofType:@"mom" inDirectory:@"MIT2ver2.momd"]; 

     NSURL *momURL = [NSURL fileURLWithPath:path]; 
     managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

    return managedObjectModel; 
} 

因爲之前我做了,當我添加了一個模型的另一個新秀的錯誤,我拿出了空間。感謝udibr回答:Implementation of 「Automatic Lightweight Migration」 for Core Data (iPhone)

感謝大家的回答。上帝解決了它!

0

您是否嘗試從模擬器中刪除應用程序?有時當你改變核心數據結構上的某些東西時,應用程序崩潰,無法正確地找到數據。刪除應用程序將強制它重建數據庫。

+0

有時,當您使用核心數據模型並對其進行更改時,除非您採取適當的步驟來遷移核心數據模型,否則應用程序將崩潰......當您刪除應用程序時,以前的核心數據模型將與所有數據,所以如果它實際上是應用程序的第二版本,那麼核心數據模型應該被遷移... – Daniel 2011-06-11 07:21:06