Может ли кто-нибудь помочь мне в добавлении данных в файл plist? - PullRequest
0 голосов
/ 12 марта 2012

Я пробовал этот код для копирования моих данных в plist, но он не работает в случае добавления. Может ли кто-нибудь предложить мне хороший способ добавления данных?
NSMutableDictionary * nameDictionary = [словарь NSMutableDictionary];

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"listNew" ofType:@"plist"];
[nameDictionary setValue:nameEntered.text forKey:@"name"];
[nameDictionary setValue:company.text forKey:@"company"];
[nameDictionary setValue:designation.text forKey:@"designation"];

// create dictionary with values in UITextFields
NSMutableArray *plist = [NSMutableArray arrayWithContentsOfFile:plistPath];
if (plist == nil) plist = [NSMutableArray array];
[plist addObject:nameDictionary];
[plist writeToFile:plistPath atomically:YES];
UIAlertView *tellErr = [[UIAlertView alloc] initWithTitle:title message:@"succsefully created" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[tellErr show];
nameEntered.text=@"";
company.text=@"";
designation.text=@"";

Ответы [ 4 ]

1 голос
/ 12 марта 2012

Вы должны использовать + [NSKeyedArchiver archiveRootObject: toFile:] для архивирования объекта Array в файл.И используйте + [NSKeyedUnarchiver unarchiveObjectWithFile:] , чтобы разархивировать его.

0 голосов
/ 12 марта 2012

Хорошо, чувак, вот код, который тебе нужен.Я использую это в существующей программе iOS.

Сначала проверьте, есть ли какая-либо информация в словаре, чтобы начинаться с

static BOOL dicIsNULL = YES;

....

//initialize the variable
dicIsNULL = YES;


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

        dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:stringsPlistPath];

        //Check if this dic has values
        for (id key in dictionary) 
        {
             //NSLog(@"listNew.plist file has values");
            dicIsNULL = NO;
            break;
        }

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

if (dicIsNULL == YES)
        {
            //NSLog(@"dictionary is NULL");

            dictionary = [[NSMutableDictionary alloc] init];
            dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:tempArray, infoKeyStr,  textTitleField1.text, titleKeyStr, userSelectedCatStr, catKeyStr, nil];

        }

        if (dicIsNULL == NO)
        {
            //NSLog(@"dictionary is NOT null");

            dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:stringsPlistPath];
            [dictionary setObject: tempArray forKey: infoKeyStr];
            [dictionary setObject: textTitleField1.text forKey: titleKeyStr];
            [dictionary setObject: userSelectedCatStr forKey: catKeyStr];
        }

надеюсь, это поможет вам.

0 голосов
/ 12 марта 2012

Вы не можете писать в основной пакет приложения в iOS. Вы должны скопировать файл списка свойств в доступный для записи каталог; затем вы можете прочитать его, изменить и переписать.

0 голосов
/ 12 марта 2012

Я бы пошел на:

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"listNew" ofType:@"plist"];
NSMutableDictionary *plist = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
if (plist == nil) plist = [[NSMutableDictionary alloc] init];
[plist setObject:nameEntered.text forKey:@"name"];
[plist setObject:company.text forKey:@"company"];
[plist setObject:designation.text forKey:@"designation"];
[plist writeToFile:plistPath atomically:YES];

... и т.д ...

Конечно, это зависит от того, чего именно вы хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...