2011-07-08 51 views
27

Tôi biết về NSUserDefaults để lưu/khôi phục người dùng tùy chọn. Lớp học tương đương cho một ứng dụng là gì? Ví dụ, ứng dụng có thể có trường "chạy lần cuối"; hoặc nó có thể có một trường để nhận dạng duy nhất thiết bị để sử dụng ở cấp ứng dụng.Lưu (Riêng tư) Cài đặt ứng dụng trên iOS?

Ý định của tôi là giữ cài đặt của ứng dụng (không phải cài đặt của người dùng) trong ứng dụng Cài đặt và không sao lưu các cài đặt đó trong iTunes, Time Machine, {whatever}.

Tôi nhận được rất nhiều tiếng ồn đối với Java và C#, nhưng không nhiều đối với iOS/iPhone/iPad.

+0

iPhone là hệ điều hành một người dùng. Bạn không thể đăng nhập bằng tên người dùng khác. Vậy tại sao bạn cần cài đặt ứng dụng, khác với cài đặt người dùng? Hay tôi đang thiếu một cái gì đó? – bartvdpoel

Trả lời

11

nếu bạn có thể lưu trữ giá trị theo NSUserDefaults, thì cũng tốt để lưu trữ tùy chọn ứng dụng.

hoặc thêm settings.plist vào dự án của bạn và đọc rằng (những gì bạn không thay đổi sau)

và bạn có thể sử dụng như thế nào.,

+ (NSDictionary*)getBundlePlist:(NSString *)plistName 
{ 
    NSString *errorDesc = nil; 
    NSPropertyListFormat format; 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
              propertyListFromData:plistXML 
              mutabilityOption:NSPropertyListMutableContainersAndLeaves   
              format:&format errorDescription:&errorDesc]; 
    return temp; 
} 

+ (id) getPropValue:(NSString *)PropertyName 
{ // I am supposing you had add your app preferences on settings.plist. 
    return [[Property getBundlePlist:@"settings"] objectForKey:PropertyName]; 
    //here Property is my class name, then you can use value by 
    //NSString *value = [Property getPropValue:@"setting1"]; 
} 
+0

Hoặc bạn có thể đặt mọi thứ vào một mảng hoặc từ điển và gọi 'writeToFile:' – Greg

+0

điều đó là tốt, vì tôi hiểu giải pháp của bạn, giải pháp này sẽ được lưu sau khi thực thi ứng dụng. hmm Tôi đã nói với anh ta để thêm giá trị vào tập tin plist trong IDE. –

0

Thật khó để biết những gì bạn đang yêu cầu . Có vẻ như NSUserDefaults là nội dung bạn đang tìm kiếm, nhưng bạn cho rằng bạn đã biết về điều đó. Vậy vấn đề của bạn là gì?

+0

Trên thiết bị, một số mục (chẳng hạn như 'lần chạy cuối cùng') sẽ không hiển thị trong Ứng dụng Cài đặt và sẽ không được sao lưu. Ý định của tôi là giữ riêng tư. – jww

+7

@noloader khi bạn đặt thứ gì đó trong NSUserDefaults, nó ** NOT ** sẽ tự động hiển thị trong Cài đặt. Để hiển thị nội dung nào đó trong cài đặt, bạn phải thêm cụ thể một gói Cài đặt vào ứng dụng của mình và _specifically_ thêm một khóa vào đó sẽ đặt giá trị đó. Không có gì sẽ tự động xuất hiện. Tôi sử dụng 'NSUserDefaults' mọi lúc và ứng dụng của tôi thậm chí không _have_ một gói Cài đặt, cũng như nó không hiển thị trong Cài đặt. – Greg

70

NSUserDefaults có thể được sử dụng cho những gì bạn đang yêu cầu.

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"shownPrompt"]) { 
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"shownPrompt"]; 
    // Show your prompt or whatever 
} 

Đó là đoạn mã hoạt động. Nếu khóa là sai, nó đặt nó thành true và hiển thị lời nhắc. Lần sau mã này chạy, khóa sẽ là true, vì vậy lời nhắc sẽ không được hiển thị.

NSUserDefaults dành riêng cho ứng dụng hiện tại trên thiết bị hiện tại và tương tự như NSMutableDictionary ở chỗ nó là hệ thống khóa-giá trị, với sự khác biệt thay vì khởi tạo riêng của bạn. , điều đó không bị xóa khi ứng dụng thoát.

NSUserDefaults là hoàn hảo cho tiết kiệm những thứ như xem một cái gì đó đã được chứng minh, ngày chạy cuối cùng, vv Đọc các tài liệu ở đây: https://developer.apple.com/documentation/foundation/userdefaults

Đừng để bị trì hoãn bởi một phần của các sở thích người dùng. Bạn có thể sử dụng nó để tiết kiệm bất cứ điều gì bạn muốn (miễn là nó là hoặc có thể được chuyển đổi thành một NSObject mà thực hiện <NSCoding>, mà về cơ bản có nghĩa là NSString, NSDictionary, NSArray, NSNumber, UITextField, int, float, bool, vv).

Chỉ cần làm rõ, những thứ bạn đặt vào NSUserDefaults sẽ không, trong mọi trường hợp, tự động bật lên trong ứng dụng Cài đặt. Nó sẽ được giữ hoàn toàn riêng tư và ẩn. Để một thứ gì đó xuất hiện trong Cài đặt, bạn cần phải thêm một nhóm Cài đặt vào ứng dụng của mình và thêm các khóa theo cách thủ công vào mỗi giá trị mà bạn muốn hiển thị trong ứng dụng Cài đặt.

+2

NightLeopard - Tôi rất muốn đưa bạn tín dụng cho câu trả lời, nhưng tôi không thể. Điều tốt nhất tôi có thể làm là một ngón tay cái SO lên. – jww

+1

Đảm bảo bạn gọi '[standardUserDefaults synchronize]' tại một số điểm để thực hiện các thay đổi. – bendytree

+1

@bendytree Theo tài liệu của Apple: Bởi vì phương thức này được tự động gọi trong khoảng thời gian định kỳ, chỉ sử dụng phương thức này nếu bạn không thể chờ đồng bộ hóa tự động (ví dụ, nếu ứng dụng sắp thoát) hoặc nếu bạn muốn cập nhật người dùng mặc định là những gì trên đĩa mặc dù bạn chưa thực hiện bất kỳ thay đổi nào. – Tom

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