2011-11-18 37 views
33

Trong ứng dụng C# Tôi luôn sử dụng tệp app.config để lưu một số dữ liệu cho ứng dụng của mình tải khi cần thiết (ví dụ: Chuỗi kết nối).Tệp cấu hình ứng dụng iOS

Cách tốt nhất để lưu thông tin như thế này trong ứng dụng iOS là gì?

Trả lời

57

Bạn có thể tạo một tập tin danh sách tài sản (có một khuôn mẫu cho rằng trong XCode, chỉ vào File -> New file và chọn ở đó), vì vậy bạn sẽ có một cái gì đó như "settings.plist", hoặc bất cứ điều gì như thế. Bạn có thể nghĩ về một plist như là một tập tin cấu hình key => giá trị, với sự khác biệt mà bạn cũng có thể giữ mảng và từ điển, bên cạnh văn bản thuần là giá trị.

Sử dụng NSBundle để tải các tập tin trong ứng dụng của bạn, giống như

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; 
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

Sau đó bạn có thể truy cập các phím của bạn như một cuốn từ điển thông thường. Chỉ cần đừng quên [phát hành] nó sau;).

+2

Nếu fr33d0m mới, có thể anh ấy đang sử dụng iOS 5, mặc định là sử dụng ARC (tính tham chiếu tự động), nếu trường hợp đó xảy ra, không giải phóng bất kỳ thứ gì. –

+0

Có, tôi sẽ sử dụng iOS 5. Cảm ơn. – Freedom

+0

Vâng, cảm ơn vì đã ghi nhớ về ARC, Sergio. –

2

Trong iO, mọi ứng dụng đều có hộp cát riêng sẽ chỉ khả dụng cho ứng dụng đó. Vì vậy, nếu bạn muốn tập tin đó được đọc chỉ truy cập lưu nó vào gói ứng dụng. lưu vào thư mục Ứng dụng.

bạn Không thể truy cập thư mục Ứng dụng trực tiếp Vì vậy, nếu bạn muốn lưu tệp của mình vào thư mục đó, bạn phải thực hiện theo chương trình.

4

Nếu bạn chỉ cần lưu trữ một bộ tương đối đơn giản của công cụ cấu hình, bạn chỉ có thể sử dụng phương pháp serialization NSDictionary 's (tôi không biết làm thế nào để liên kết đến các thư mục phương pháp trong doc lớp):

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; 

NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ 
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; 
} 

// writing settings 
[settings writeToFile:settingsPath atomically:YES]; 

Vì tôi không biết làm thế nào quen thuộc bạn với mục tiêu-c, tôi cũng sẽ lưu ý:

+1

iOS 5 tính tham chiếu tự động và được bật theo mặc định trong Xcode. –

+0

Đúng, tôi quên mất điều đó, mặc dù nó không hoàn hảo. IIRC, bạn sẽ phải tuân theo các tiêu chuẩn mã hóa một phụ thuộc xử lý tuần hoàn vẫn còn. – Jeff

10

Đối với các bit dữ liệu nhỏ như chuỗi kết nối, tôi muốn sử dụng NSUserDefaults.

Khi bạn muốn lưu chuỗi kết nối của bạn, bạn muốn làm điều này:

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
              forKey:@"connectionString"]; 

Khi bạn muốn tải nó, bạn muốn làm điều này:

myConnectionString = [[NSUserDefaults standardUserDefaults] 
          stringForKey:@"connectionString"]; 
+4

Với NSUserDefaults, lần đầu tiên tôi ghi vào tập tin tôi cần để chạy ứng dụng. Mục tiêu của tôi là có một tệp nơi tôi có thể chỉnh sửa nội dung trên trình chỉnh sửa thông thường mà không phải chạy ứng dụng (Có lẽ tôi muốn làm điều này vì tôi đã quen với app.config trên cửa sổ). Dù sao cũng cảm ơn bạn... – Freedom

2

Cấu hình ứng dụng iOS file trong Swift với iOS 8.3:

let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! 
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! 

    // Usage example: Google Maps iOS SDK/API Configuration. 
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 
0

Tôi nhận ra tôi là muộn để đảng, nhưng sau khi tìm chồng này tràn Tôi đã chán nản ở câu trả lời được chấp nhận, vì vậy tôi created a pod để giải quyết nó! Điều này được dựa trên ý tưởng từ answer của @ RafaelSteil, nhưng nó có giao diện đơn giản hơn, lưu trữ dữ liệu cấu hình đã tải và nó hỗ trợ các nhóm cung cấp các giá trị mặc định riêng có thể bị ghi đè bởi ứng dụng chính. Tôi hi vọng nó giúp ích cho ai đó.

0

Cập nhật cho Swift 3 Xcode 8

Thêm một danh sách bất động sản mới để dự án của bạn có tên là "Sample.plist". Sau đó xem ví dụ sau.

let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! 
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! 
    print(sampleConf.object(forKey: "test") as! String) 
Các vấn đề liên quan