В моем приложении мне нужно сохранить данные в файле plist файл для использования в другом UIViewController
и сохранить крошечный db в приложении. Я сделал так:Не удалось создать файл plist в IOS
- я получаю информацию о том, что нужно хранить в этом файле
- я вставил эту информацию в
NSDictionary
- Я вставил
NSDictionary
вNSMutableArray
- Теперь я сделал утилиту класс, который обрабатывает работу с файлом Но он не создает файл plist в каталоге Documents. Вот мой код:
ViewController.m
- (void)saveActivity {
if ([FileHander plistExist]) {
NSMutableArray *dataFromFile = [[NSMutableArray alloc]init];
dataFromFile = [FileHander loadDataFromFile];
if (![[dataFromFile lastObject]objectForKey:@"type"]) {
[FileHander saveFileWithArray:arrayActivity];
} else {
[dataFromFile addObject:arrayActivity];
[FileHander saveFileWithArray:dataFromFile];
}
} else {
NSLog(@"%@", arrayActivity);
[FileHander saveFileWithArray:arrayActivity];
}
}
arrayActivity
содержит это (координаты, скорость, время и т.д. ...):
(
{
coordinates = (
"<+45.44083526,+9.19919774> +/- 10.00m (speed 0.00 mps/course 71.02) @ 04/02/14 12:46:08 Ora standard dell'Europa centrale",
"<+45.44083561,+9.19919755> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44083612,+9.19919728> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44083663,+9.19919700> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44083714,+9.19919673> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44084181,+9.19917132> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44083100,+9.19919440> +/- 65.00m (speed -1.00 mps/course -1.00) @ 04/02/14 12:46:33 Ora standard dell'Europa centrale",
"<+45.44088744,+9.19913454> +/- 50.00m (speed 0.00 mps/course -1.00) @ 04/02/14 12:46:35 Ora standard dell'Europa centrale",
"<+45.44088744,+9.19913454> +/- 30.00m (speed 0.00 mps/course -1.00) @ 04/02/14 12:46:36 Ora standard dell'Europa centrale",
"<+45.44088744,+9.19913454> +/- 30.00m (speed 0.00 mps/course -1.00) @ 04/02/14 12:46:37 Ora standard dell'Europa centrale",
"<+45.44088744,+9.19913454> +/- 30.00m (speed 0.00 mps/course -1.00) @ 04/02/14 12:46:39 Ora standard dell'Europa centrale"
);
speed = (
);
steps = 16;
time = "00:00:08";
type = Trekking;
}
)
класс утилита это :
FileHandler.m
#import "FileHander.h"
@implementation FileHander
+ (BOOL) plistExist {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *path = [documentsDir stringByAppendingPathComponent:@"activity.plist"];
return [[NSFileManager defaultManager]fileExistsAtPath:path];
}
+ (NSMutableArray *) loadDataFromFile {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *path = [documentsDir stringByAppendingPathComponent:@"activity.plist"];
NSMutableArray *dataFound = [NSArray arrayWithContentsOfFile:path];
return dataFound;
}
+ (BOOL) deletePlist {
NSFileManager *manager = [NSFileManager defaultManager];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"activity.plist"];
NSError *error;
BOOL success =[manager removeItemAtPath:filePath error:&error];
if (success) {
return YES;
}
else
{
return NO;
}
}
+ (void) saveFileWithArray: (NSMutableArray*)activityArray {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"activity.plist"];
[activityArray writeToFile:fileName atomically:YES];
}
@end
Когда я исполню это приложение не может создать файл Plist на устройстве (я смотрел этот файл с помощью Mac App IEXPLORER), что не так в моем коде? Я использовал тот же код для разработки другого приложения, и он отлично работает. Надеюсь, вы поможете мне решить проблему. Спасибо
Я бы предложил проверить возвращаемое значение из 'writeToFile: atomically: 'и распечатайте путь, который вы отправляете (' NSLog (@ "Path:% @", fileName) '), чтобы узнать, что может произойти. – gaige
Я попытался запустить его на симуляторе и создать файл без координат и скорости (очевидно), почему он не запускается на устройстве? Я попробовал, и это показывает мне следующее: «PATH:/var/mobile/Applications/0874CD25-D82E-4FC4-BB5C-5302BE5DA95E/Documents/activity.plist' – lucgian841
Трудно сказать, не проверив ошибки. Вы также можете сбросить ActivityArray, чтобы убедиться, что все типы могут быть правильно закодированы в plist. Это объясняет, почему пустой plist может быть записан, а один из записей не может быть. – gaige