Có cách nào để tôi chỉ có thể chạy một chức năng một lần (khi ứng dụng được cập nhật hoặc cài đặt) không? Tôi không thể sử dụng kịch bản chạy như tôi nên sử dụng chức năng mục tiêu c.Chỉ thực thi chức năng ở lần chạy đầu tiên ios
Trả lời
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"];
}
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).
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.
Nên (Thiếu dấu ngoặc kép) -> [[NSUserDefaults standardUserDefaults] setFloat: CurrentVersion forKey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396
@ 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. –
Thú vị! Tốt để biết. Xin lỗi vì sự nhầm lẫn. – mikemike396
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")
}
Đâ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")
}
}
- 1. Android: Chỉ thực thi mã trên lần chạy đầu tiên và mọi nâng cấp tiếp theo
- 2. setInterval() chỉ chạy chức năng một lần
- 3. Hiển thị màn hình khi khởi chạy lần đầu tiên chỉ trong iOS
- 4. Phantomjs không thực thi chức năng trong page.evaluate chức năng
- 5. Gỡ lỗi ứng dụng iOS khi khởi chạy lần đầu tiên
- 6. lỗi khi chạy cpan lần đầu tiên
- 7. Cách khởi chạy hoạt động chỉ một lần khi ứng dụng được mở lần đầu tiên?
- 8. thực thi yêu cầu chức năng gọi
- 9. Regex chỉ xuất hiện lần đầu tiên?
- 10. EF6/Code Đầu tiên: Siêu chậm trong lần truy vấn đầu tiên, nhưng chỉ trong Debug
- 11. Tại sao chức năng Meteor Router luôn chạy hai lần
- 12. Tại sao hoạt ảnh iOS chậm lại trong lần chạy đầu tiên?
- 13. OnTouch trong MapView chỉ kích hoạt lần đầu tiên
- 14. presentModalViewController trong viewDidLoad khi khởi chạy lần đầu tiên
- 15. Khi chạy thử nghiệm đăng nhập Behat thông qua PhantomJS, nó chỉ chạy trên lần chạy đầu tiên
- 16. Phát hiện lần chạy đầu tiên của ứng dụng
- 17. Emacs sao chép chức năng M-RET của chế độ org ở chế độ đầu tiên
- 18. Cảnh báo 'fileAttributesAtPath: traverseLink được chấp nhận: đầu tiên bị phản đối ở ios 2.0
- 19. PHP: thực thi kịch bản 5 phút sau khi tập lệnh đầu tiên chạy
- 20. Làm cách nào để thực thi một bookmarklet chỉ chạy một lần?
- 21. Học Oracle lần đầu tiên
- 22. Hiển thị tên của chức năng hiện đang thực thi
- 23. Tùy chọn được chia sẻ chỉ lưu lần đầu tiên
- 24. Khả thi thực hiện chức năng đếm thủ công
- 25. Chức năng SQL tổng hợp để lấy chỉ số đầu tiên từ mỗi nhóm
- 26. x86 bắt đầu thực thi tại địa chỉ nào?
- 27. Scala - chi phí gọi 'chức năng lớp học đầu tiên'
- 28. Thực thi thời gian chạy đệ quy Java so với các ngôn ngữ khác/chức năng?
- 29. chức năng iconv_strlen gây ra thời gian chờ thực thi, chạy trên MAMP
- 30. loadView: chức năng trong UIView iOS
cảm ơn Bhupendra – Eldhose
bạn được chào đón :) – Bhupendra
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