objective-c无法从属性列表中读取

时间:2014-04-27 14:34:58

标签: ios objective-c plist

self.toDoItems = [[NSMutableArray alloc] init]; //initialize array
self.dataFileName = @"PropertyList";
self.filePath = [self.dataFileName stringByAppendingString:@".plist"];
self.rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                          NSUserDomainMask, YES) objectAtIndex:0];
self.filePath = [self.rootPath stringByAppendingPathComponent:self.filePath];
self.NSSRootNodeName = @"ToDoList"; //name of the root node in the property list

//    if (![[NSFileManager defaultManager] fileExistsAtPath: self.filePath]) {
//        self.filePath = [[NSBundle mainBundle] pathForResource:self.dataFileName   ofType:@"plist"];
//    }

 NSLog(@"File path: %@", self.filePath);

// Uncomment the following line to preserve selection between presentations.
self.clearsSelectionOnViewWillAppear = NO;

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
self.navigationItem.rightBarButtonItem = self.editButtonItem;

//read xml file and load to array
NSString *errorDesc = nil;
NSPropertyListFormat format;

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:self.filePath];
if (plistXML==nil) {
    NSLog(@"Error reading plistXML");
}
NSDictionary *rootDictionary = (NSDictionary *)[NSPropertyListSerialization
                                                propertyListFromData:plistXML
                                                mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                                format:&format
                                                errorDescription:&errorDesc];
if (!rootDictionary) {
    NSLog(@"Error reading plist: %@, format: %d", errorDesc, format);
} 

输出如下。我不确定为什么我会在下面收到这些错误: 我的PropertyList.plist位于我的应用程序内的Documents文件夹中。 有人可能会指出我做错了什么。

File path: /Users/Computer/Library/Application Support/iPhone Simulator/7.1/Applications/78B5F9BA-8376-4001-ACA0-936D9B4D6342/Documents/PropertyList.plist

Error reading plistXML
Error reading plist: stream had too few bytes, format: 0

1 个答案:

答案 0 :(得分:0)

FWIW,这对我有用:

NSFileManager *fileManager = [[NSFileManager alloc] init];
if ([fileManager fileExistsAtPath: [self filePathForState]])
{
    printf("found state file\n");
    NSData *data = [NSData dataWithContentsOfFile:[self filePathForState]];
    ...
}
else 
{
    printf("no state file found\n");
}
[fileManager release];

- (NSString *) filePathForState
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *result = [documentsDirectory stringByAppendingPathComponent: @"circles06"];
    printf("filePathForState: %s\n", [result UTF8String]);
    return result;
}

- (void) saveState
{
    NSData *state = [model stateData];
    [state writeToFile: [self filePathForState] atomically: NO];
}