2012-10-12 26 views

Trả lời

43
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    if (![userDefaults valueForKey:@"version"]) 
    { 
      // CALL your Function; 

      // Adding version number to NSUserDefaults for first version: 
      [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];  
    } 


    if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]) 
    { 
    /// Same Version so dont run the function 
    } 
    else 
    { 
     // Call Your Function; 

     // Update version number to NSUserDefaults for other versions: 
     [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"]; 
    } 
+0

cảm ơn Bhupendra – Eldhose

+0

bạn được chào đón :) – Bhupendra

+0

Công cụ bẻ khóa @Bhupendra, tôi đã cố gắng viết một tệp cài đặt chuyên biệt cho người dùng lưu trữ tài liệu, cách của bạn tốt hơn nhiều – MagicalArmchair

2

Bạn có thể tạo khóa giá trị BOOL (ví dụ: isFirstLaunch = NO) trong NSUserDefaults và đặt thành YES sau khi bạn đã thực hiện hàm.

Nếu bạn muốn thực thi nó mỗi lần người dùng khởi chạy ứng dụng, bạn sẽ cần đặt khóa thành giá trị mặc định trước khi Ứng dụng tồn tại (tức là đặt lại trong phương thức -applicationWillTerminate: trong AppDelegate).

3

Nếu bạn muốn chạy một số mã khi ứng dụng là một trong hai đầu tiên được cài đặt hoặc sau mỗi lần cập nhật sau đó bạn có thể đọc các phiên bản hiện tại của ứng dụng của bạn từ bó

CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]; 

của bạn và viết rằng giá trị mặc định người sử dụng sau khi bạn đã chạy mã.

[[NSUserDefaults standardUserDefaults] setFloat:currentVersion 
             forKey:kLastVersionThatExecutedMyCodeKey]; 

Lần sau khi bạn khởi động ứng dụng, bạn so sánh giá trị từ mặc định của người dùng với phiên bản gói. Nếu phiên bản gói đã thay đổi, ứng dụng đã được cập nhật, điều đó có nghĩa là bạn nên chạy lại mã và viết phiên bản mới cho giá trị mặc định của người dùng.

+0

Nên (Thiếu dấu ngoặc kép) -> [[NSUserDefaults standardUserDefaults] setFloat: CurrentVersion forKey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396

+0

@ Pyraego.com Tiền tố một tên biến với một 'k' nhỏ là một quy ước chung để chỉ ra rằng nó là một hằng số. Các khung công tác của Apple sử dụng nó ở nhiều nơi. 'kLastVersionThatExecutedMyCodeKey' được cho là một biến, không phải là một chuỗi. –

+0

Thú vị! Tốt để biết. Xin lỗi vì sự nhầm lẫn. – mikemike396

7

này được chuyển đổi Swift của Bhupendra's answer:

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary // Fetch info.plist as a Dictionary 
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as NSString 
let val: Float = temp.floatValue 

var userDefaults = NSUserDefaults() 
if userDefaults.valueForKey("version") == nil {    
    // Call function 
    // Adding version number to NSUserDefaults for first version 
    userDefaults.setFloat(val, forKey: "version") 
} 

if NSUserDefaults().floatForKey("version") == val { 
    // Same Version so dont run the function 
} else {  
    // Call function 
    // Update version number to NSUserDefaults for other versions 
    userDefaults.setFloat(val, forKey: "version") 
} 
1

Đây là phiên bản Swift2.0 của trả lời Bhupendra, nếu bất cứ ai cần nó!

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary 
    //Fetch info.plist as a Dictionary 
    let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as! NSString 
    let val: Float = temp.floatValue 

    let userDefaults = NSUserDefaults() 
    if userDefaults.valueForKey("version") == nil { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
    if NSUserDefaults().floatForKey("version") == val { 
     //if it is the same version, don't run the code 
    } 
    else { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
} 
Các vấn đề liên quan