2010-11-13 5 views
0

J'ai des fuites dans ce code. Les fuites de l'outil performane me disent que c'est dans cette ligne:Fuites dans le chargement des données de plist à CoreData

NSArray *fakeData = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"FakeData" ofType:@"plist"]]; 

Je ne peux pas savoir ce qui se passe. Le plist que je charge a 3 éléments NSDictionary, donc même que des fuites dans la capture d'écran. Chaque dictionnaire a 3 chaînes.

Le code entier:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
//Ładowanie danych 
if (![[FlickrFetcher sharedInstance] databaseExists]) { 
    NSArray *fakeData = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"FakeData" ofType:@"plist"]]; 

    for (NSDictionary *element in fakeData) { 
     //Wypełnianie CoreData danymi 
     Photo *newPhoto = (Photo *)[NSEntityDescription insertNewObjectForEntityForName:@"Photo" 
                  inManagedObjectContext:[[FlickrFetcher sharedInstance] managedObjectContext]]; 
     NSLog(@"Creating Photo: %@", [element objectForKey:@"name"]); 
     [newPhoto setName:[element objectForKey:@"name"]]; 
     [newPhoto setImageURL:[element objectForKey:@"path"]]; 

     NSLog(@"Person is: %@", [element objectForKey:@"user"]);ŕŕŕ 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", [element objectForKey:@"user"]]; 

     NSMutableArray *peopleArray = (NSMutableArray *)[[FlickrFetcher sharedInstance] fetchManagedObjectsForEntity:@"Person" 
                            withPredicate:predicate]; 
     NSEnumerator *enumerator = [peopleArray objectEnumerator]; 
     Person *person; 
     BOOL exists = FALSE; 

     while (person = [enumerator nextObject]) { 
      NSLog(@"Person is: %@", person.name); 
      if ([person.name isEqualToString:[element objectForKey:@"user"]]) { 
       exists = TRUE; 
       NSLog(@"-- Person exists: %@", person.name); 
       [newPhoto setOwner:person]; 
      } 
     } 

     if (!exists) { 
      Person *newPerson = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" 
                    inManagedObjectContext:[[FlickrFetcher sharedInstance] managedObjectContext]]; 
      [newPerson setName:[element objectForKey:@"user"]]; 
      NSLog(@"Person created: %@", newPerson.name); 
      [newPhoto setOwner:newPerson]; 
     } 

     NSError *error; 
     if (![[[FlickrFetcher sharedInstance] managedObjectContext] save:&error]) { 
      NSLog(@"Unresolved error %@ %@", error, [error userInfo]); 
      exit(-1); 
     } 

     [fakeData release];  
    } 

} 

//Person Navigation Controller 
personNavigationController = [[UINavigationController alloc] init]; 
PersonListViewController *personListViewController = [[PersonListViewController alloc] initWithStyle:UITableViewStylePlain]; 
personListViewController.title = @"Contacts"; 
[personNavigationController pushViewController:personListViewController animated:NO]; 
[personListViewController release]; 

//Recent Photo Navigation Controller 
recentPhotoNavigationController = [[UINavigationController alloc] init]; 
RecentPhotoViewController *recentPhotoViewController = [[RecentPhotoViewController alloc] init]; 
recentPhotoViewController.title = @"Recent"; 
UITabBarItem *item = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemRecents tag:1]; 
recentPhotoViewController.tabBarItem = item; 
[item release]; 
[recentPhotoNavigationController pushViewController:recentPhotoViewController animated:NO]; 
[recentPhotoViewController release]; 

//Tab Bar Controller 
tabBarController = [[UITabBarController alloc] init]; 
tabBarController.viewControllers = [NSArray arrayWithObjects: 
            personNavigationController, 
            recentPhotoNavigationController, 
            nil]; 


[window addSubview:tabBarController.view]; 
[window makeKeyAndVisible]; 

return YES; 

}

Répondre

0

Il ressemble à votre tableau fakeData est libéré à l'intérieur de la boucle, ce qui semble problématique à plusieurs niveaux. Vous avez probablement voulu le libérer quand la boucle est sortie. Du point de vue de Leaks, la boucle for pourrait ne jamais être entrée, auquel cas l'objet serait divulgué.

Questions connexes