2009-10-19 30 views
5

Trong ứng dụng iPhone của tôi, tôi có hai tệp plist để lưu trữ "Chủ đề". Một là tệp chỉ đọc chứa các chủ đề mặc định và một chứa chủ đề tùy chỉnh mà người dùng đã tạo. Tôi đang sử dụng các tập tin plist bởi vì nó rất dễ dàng cho tôi để đọc từ plist và tạo các đối tượng Theme mới.Làm cách nào để nối thêm một mục mới vào một plist?

Plist của tôi là một mảng các đối tượng từ điển.

Có cách nào dễ dàng để thêm một đối tượng từ điển mới vào tệp plist của tôi không? Hoặc tôi có cần phải đọc các tập tin vào bộ nhớ, gắn thêm đối tượng từ điển mới, và viết nó trở lại hệ thống tập tin?

Cảm ơn!

+0

Đó là cách dễ dàng. Bạn còn hy vọng điều gì nữa? –

+1

Tôi đào các tài liệu để xem liệu tôi có thiếu một cái gì đó hay không, chẳng hạn như các phương pháp tiện lợi để biến đổi plists, vì chúng được sử dụng rộng rãi trong các ứng dụng Cocoa. Đoán không :) –

Trả lời

5

Với Cocoa, bạn cần đọc tệp này vào bộ nhớ, nối thêm đối tượng từ điển mới và ghi nó trở lại hệ thống tệp. Nếu bạn sử dụng một XML plist, bạn có thể khá dễ dàng phân tích cú pháp nó và từng bước ghi vào tập tin, nhưng nó cũng sẽ khá lớn hơn một chút, do đó, nó không có giá trị nó.

Nếu viết lại plist mất quá nhiều thời gian, bạn nên điều tra bằng cách sử dụng cơ sở dữ liệu thay thế (có lẽ thông qua dữ liệu lõi). Trừ khi tập tin là rất lớn, tôi nghi ngờ điều này sẽ là một vấn đề ngay cả với khả năng bộ nhớ của iPhone và tốc độ ghi flash.

+0

Điều đó sẽ làm! Cảm ơn. –

+0

Chỉ cần nhớ rằng bạn không thể ghi vào gói ứng dụng. Bạn phải tìm thư mục tài liệu của ứng dụng của bạn (sử dụng 'NSSearchPathForDirectoriesInDomain()') và viết nó ở đó. –

3

(Tôi sao chép này cho những ai không muốn bấm vào một liên kết từ một câu hỏi tương tự tôi đã trả lời ở đây: A question on how to Get data from plist & how should it be layout)

Dưới đây là hai phương pháp để đọc và ghi giá trị từ một plist sử dụng một NSDictionary:

- (NSMutableDictionary*)dictionaryFromPlist { 
    NSString *filePath = @"myPlist.plist"; 
    NSMutableDictionary* propertyListValues = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 
    return [propertyListValues autorelease]; 
} 

- (BOOL)writeDictionaryToPlist:(NSDictionary*)plistDict{ 
    NSString *filePath = @"myPlist.plist"; 
    BOOL result = [plistDict writeToFile:filePath atomically:YES]; 
    return result; 
} 

và sau đó trong khối mã của bạn ở đâu đó:

// Read key from plist dictionary 
NSDictionary *dict = [self dictionaryFromPlist]; 
NSString *valueToPrint = [dict objectForKey:@"Executable file"]; 
NSLog(@"valueToPrint: %@", valueToPrint); 

// Write key to plist dictionary 
NSString *key = @"Icon File"; 
NSString *value = @"appIcon.png"; 
[dict setValue:value forKey:key]; 

// Write new plist to file using dictionary 
[self writeDictionaryToPlist:dict]; 
3

Đây là cách tôi đang phụ thêm dữ liệu vào plist:

NSString *filePath = [self dataFilePath]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{ 
    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 
    [array addObject:countdownLabel.text]; 
    [array writeToFile:[self dataFilePath] atomically:YES]; 
    [array release]; 
} 
else 
{ 
    NSArray *array = [NSArray arrayWithObject:countdownLabel.text]; 
    [array writeToFile:filePath atomically:YES]; 
} 
Các vấn đề liên quan