2010-10-19 41 views
7

Tôi muốn tạo một trò chơi, sẽ sử dụng một hệ thống cấp. Vì vậy, tôi muốn lưu trữ các cấp của tôi và để có thể thay đổi chúng trong khi chơi game (để lưu trạng thái). Vì vậy, tôi quyết định sử dụng XML để lưu trữ các cấp. Tôi tìm thấy lớp NSXmlParser để đọc từ XML, nhưng tôi không thể tìm thấy một nhà văn để lưu trạng thái mức. Trong game của tôi trạng thái cấp và mức độ rất giống nhau (tôi có rất nhiều đối tượng di chuyển), vì vậy tôi không wan't để lưu trữ dữ liệu trạng thái cấp độ tách ra từ cấp nó thuộc về. Vấn đề là tôi không thể tìm thấy một cách để dễ dàng sửa đổi các tập tin XML trên iPhone. Có lẽ tôi đang sử dụng một cách tiếp cận xấu.Lớp trình soạn thảo XML iOS

Trả lời

3

Bạn có thể sử dụng C libary libxml2 để đọc và ghi XML. Dưới đây là phần giới thiệu nhanh: Cocoa Samurai: Getting Some XML Love with libXML2.

Tuy nhiên, bạn có cân nhắc sử dụng CoreData hoặc triển khai giao thức NSCoding không? NSCoding sẽ dễ dàng hơn để thêm vào các lớp hiện có.

5

Nếu bạn ném các dữ liệu trong một NSDictionary, bạn có thể làm (với hãy cẩn thận):

[myDictionary writeToFile:pathToPlist atomically:YES]; 
+0

điều này là không sử dụng xml, phải không? – Andrew

+0

@Andrew tệp kết quả sẽ là XML (cụ thể, ở định dạng Plist) –

5

Hãy thử mã nguồn mở XML stream writer for iOS:

  • Được viết bằng Objective-C, một .h đơn . và tập tin .m
  • Một @protocol hỗ trợ namespace và một cho mà không

Ví dụ:

// allocate serializer 
XMLWriter* xmlWriter = [[XMLWriter alloc]init]; 

// start writing XML elements 
[xmlWriter writeStartElement:@"Root"]; 
[xmlWriter writeCharacters:@"Text content for root element"]; 
[xmlWriter writeEndElement]; 

// get the resulting XML string 
NSString* xml = [xmlWriter toString]; 

này tạo ra chuỗi XML sau:

<Root>Text content for root element</Root> 
+0

LGPL không phải là (theo ý kiến ​​của tôi) là giấy phép tốt cho các dự án iOS. Nó có nghĩa là nếu tôi muốn sử dụng mã của bạn, tôi có nghĩa vụ phải phát hành ứng dụng của tôi dưới dạng liên kết lại (tức là tôi phải phát hành các tệp đối tượng, mà tôi có thể làm nhưng đó là một loạt các rắc rối thêm). Bạn đã cân nhắc sử dụng Giấy phép Công cộng Mozilla chưa? Nó bắt buộc mọi người phải giải phóng những thay đổi mà họ thực hiện đối với các tệp được cấp phép MPL, nhưng không yêu cầu các tệp đối tượng được phát hành. – JosephH

+2

Càng ít rắc rối cho mọi người, thì càng tốt. Tôi đã thêm giấy phép GNU cho phép, vì nó không giống như bất kỳ thay đổi bên thứ ba nào sẽ được thực hiện cho thư viện vào bất kỳ ngày nào. – ThomasRS

5

tôi sẽ khuyên bạn sử dụng KissXML. Tác giả bắt đầu trong một tình huống tương tự như bạn và tạo một trình bao bọc API tương thích NSXML xung quanh libxml. Ông thảo luận về các tùy chọn và quyết định here trên blog của mình.

+1

Ngoài ra, đây có thể là một bản sao của: http://stackoverflow.com/questions/3849270/iphone-how-to-write-xml-files/3973554#3973554 – codelark

Các vấn đề liên quan