2013-05-13 3 views
-2

У меня есть plist, и когда пользователь пишет заметки, я сохраняю в этом plist вместе с их id, каждый раз, когда пользователь открывает, что он будет проверять, получил ли этот идентификатор пользователя какие-либо заметки в plist и отображает его в uitableview. Также пользователь может удалить ноты, но когда я попытался сделать следующий процесс я получил исключенияУдалить из Plist не работает?

1.in вид didload проверить, получил ли пользователь какие-либо предыдущие заметки или не 2.check PLIST с идентификатором пользователя 3.Ел матч получить соответствующие примечания - . и сохраните его в изменяемом массиве. Так когда пользователь добавляет новую заметку, мы сначала используем предыдущий измененный массив для хранения новой заметки и записываем ее снова в plist // не работаем для меня. 5.When пользователь удалить заметки затем обновить itinto PLIST

+1

всегда считал, что на сайте кодирования, показывая код будет лучше, чем описание указанного кода? –

ответ

1

Я предполагаю, что у вас есть структура что-то похожее на этот

[ 
    { 
     "UserID": 1, 
     "Notes": [ 
      { 
       "NoteID": 1, 
       "Desc": "Description" 
      },{ 
       "NoteID": 2, 
       "Desc": "Description" 
      } 
     ] 
    } 
] 

Plist путь к файлу в каталоге документов

- (NSString *)userNotesFilePath{ 

    NSString *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                   NSUserDomainMask, 
                   YES)[0]; 

    return [documents stringByAppendingPathComponent:@"UserNotes.plist"]; 

} 

Метод извлекает сохраненные заметки для пользователя Id

- (NSArray *)savedNotesForUserID:(NSInteger)userID{ 

    NSString *filePath = [self userNotesFilePath]; 
    NSArray *savedNotes = [NSArray arrayWithContentsOfFile:filePath]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UserID = %d",userID]; 

    NSDictionary *user = [[savedNotes filteredArrayUsingPredicate:predicate]lastObject]; 

    return user[@"Notes"]; 
} 

Сохраняет новые примечания массив как таковой в частности идентификатором пользователя

- (void)insertNotes:(NSArray *)notesArray forUserID:(NSUInteger)userID{ 

    if (!notesArray) { 
     return; 
    } 

    NSString *filePath = [self userNotesFilePath]; 
    NSMutableArray *savedNotes = [NSMutableArray arrayWithContentsOfFile:filePath]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UserID = %d",userID]; 

    NSInteger index = [savedNotes indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){ 
     return [predicate evaluateWithObject:obj]; 
    }]; 

    NSMutableDictionary *user = [savedNotes[index] mutableCopy]; 
    user[@"Notes"] = notesArray; 

    [savedNotes replaceObjectAtIndex:index withObject:user]; 
    [savedNotes writeToFile:filePath atomically:YES]; 

} 

Вставьте одну ноту сохраненных заметок

- (void)insertNote:(NSDictionary *)userNote forUserID:(NSUInteger)userID{ 

    if (!userNote) { 
     return; 
    } 

    NSString *filePath = [self userNotesFilePath]; 
    NSMutableArray *savedNotes = [NSMutableArray arrayWithContentsOfFile:filePath]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UserID = %d",userID]; 

    NSInteger index = [savedNotes indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){ 
     return [predicate evaluateWithObject:obj]; 
    }]; 

    NSMutableDictionary *user = [savedNotes[index] mutableCopy]; 

    NSMutableArray *savedUserNotes = [user[@"Notes"] mutableCopy]; 
    if (!savedUserNotes) { 
     savedUserNotes = [NSMutableArray array]; 
    } 

    [savedUserNotes addObject:userNote]; 

    user[@"Notes"] = savedUserNotes; 

    [savedNotes replaceObjectAtIndex:index withObject:user]; 
    [savedNotes writeToFile:filePath atomically:YES]; 
} 
Смежные вопросы