2015-02-18 2 views
1

У меня есть NSDictionary в проекте, который был создан с течением времени, и мне нужно взять все данные из него из этого проекта в другой проект.Извлечение NSDictionary из проекта

Любая идея, как я могу достичь этого, не добавляя его один за другим?

Я думал об извлечении все в массивы и передавать массивы, но его не очень хороший вариант

+0

Сохраненные данные в keyChain и доступ к нему для другого проекта. Может быть, это хороший вариант для вас. –

+0

.. Я не уверен, что понял. вы хотите поделиться NSDictionary между приложениями во время выполнения или между проектами во время компиляции –

+0

просто хотел взять nsdictionary и сохранить свои данные в данных приложения, чтобы каждый, кто его загрузил, будет вставлен в этот nsdictionary, например, Maarten1909 предложил – Dante

ответ

4

Probaly не лучшее решение, но он будет работать нормально.

Вы можете преобразовать словарь в строку, используя следующие шаги. Затем вы записываете строку и копируете ее. После этого вы можете сделать обратное действие этих шагов в своем новом проекте.

Проект 1

NSDictionary *dictionary = [NSDictionary alloc]init]; 
NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&error]; 
NSString *dictionaryString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",dictionaryString); #Copy this string from the debugger 

Проект 2

NSError *error; 
NSString *dictionaryString = @"PASTE_DEBUGGER_STRING"; 
NSData *jsonData = [dictionaryString dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 
+0

слишком быстро Идеальная идея –

+0

это отличная идея, но теперь у меня длинная строка с тоннами «отметок в ней, потребуются годы, чтобы изменить их все». – Dante

+0

любая идея, что я могу с ней сделать? – Dante

0

я бы записать его в файл, а затем импортировать его в новое приложение. Сначала вы запустите метод в своем приложении, а затем возьмите файл из папки документов в iTunes. Добавьте его в папку документов в новом приложении и добавьте код чтения.

Чтобы сохранить его:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myDictionary.plist"]; 

BOOL success = [myDictionary writeToFile:stringsPlistPath atomically:YES]; 

if (success) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Your configuration file is in the Documents folder of the app which is accessible via iTunes." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    [alert show]; 
} else { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"There was a problem creating the configuration file. Please try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    [alert show]; 
} 

Чтобы прочитать:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myDictionary.plist"]; 

NSDictionary *loadedDictionary = [NSDictionary dictionaryWithContentsOfFile:stringsPlistPath]; 

Это оставит свой файл там. Если вы хотите его удалить:

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSError *error; 
BOOL success = [fileManager removeItemAtPath:stringsPlistPath error:&error]; 

if (success) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The configuration file was successfully loaded and has now been removed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    [alert show]; 
} 
else 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"The configuration file was successfully loaded but could not be removed. You will need to remove it manually." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
    [alert show]; 
} 
+0

есть способ извлечь файл myDictionary.plist в новый проект? так что даже если я установлю приложение на другом телефоне, файл все равно будет там – Dante

+0

Вы можете поместить сохраненный plist в комплект и построить его там, тогда это будет с каждой версией приложения –

+0

. Я сохранил файл, но я не могу найти его в любом месте проекта, извините, если я не понял вас правильно – Dante