2012-01-27 44 views
1

我的方法checkIfExistDatabase在第二次運行時必須返回YES,但它返回NO。這是一個問題。核心數據:我想僅填充我的數據庫第一次運行

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[CoreDataWrapper sharedInstance] checkIfExistDatabase]; 
    return YES; 
} 

-(void) checkIfExistDatabase 
{ 
    NSURL *url = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Mew.sqlite"]; 
    BOOL isExists = [[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]; 
    if (!isExists) 
    { 
    [self populateDatabase]; 
    } 
} 

-(void) populateDatabase 
{ 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:[self managedObjectContext]]; 
for (int i =0; i<2; i++) 
{ 
    Test *test = [[[Test alloc] initWithEntity:entity insertIntoManagedObjectContext:[self managedObjectContext]] autorelease]; 
    test.text = @"Text"; 
    test.index = [NSNumber numberWithInt:i]; 
} 
[self saveContext]; 
} 

更新:我添加applicationDocumentsDirectory方法

- (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

輸出:

NSLog(@"absolute string: %@", [url absoluteString]); 

absolute string: file://localhost/var/mobile/Applications/6EE4D791-B798-4A2E-83DD-BFA41ED86940/Documents/Mew.sqlite 
+0

您是否登錄過並檢查過'... url absoluteString'是否正確 – 2012-01-27 10:07:20

回答

2

不檢查實體的存在,爲您在該實體對象(記錄)。像這樣:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:self.managedObjectContext]; 

[request setEntity:entity];  

NSError *error = nil; 
NSUInteger count = [self.managedObjectContext countForFetchRequest:request error:&error]; 

如果您有一個大於0的計數,您有一個填充的核心模型實體。

2

fileExistsAtPath:採取路徑而不是URL?

NSString *file = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"Mew.sqlite"]; 
BOOL isExists = [[NSFileManager defaultManager] fileExistsAtPath:file]; 
+0

我更新了我的問題。 – Voloda2 2012-01-27 11:05:12

+0

我的答案依然如此。 fileExistsAtPath需要一個路徑。你給它一個URL。 – 2012-01-27 11:07:56

相關問題