Tôi có thuộc tính thay đổi thành không hợp lệ khi tôi di chuyển giữa viewDidLoad và viewWillAppear. Tôi không biết tại sao điều đó lại xảy ra.Tại sao thuộc tính NSString thay đổi thành giá trị không hợp lệ?
Tôi có một lớp trợ giúp có đường dẫn đến cơ sở dữ liệu của tôi. Tôi phân bổ lớp này trong ủy nhiệm ứng dụng. RootViewController được một tham chiếu đến appdelegate như thế này:
//inside .h file
@interface RootViewController : UITableViewController
<UITableViewDelegate, UITableViewDataSource>{
NSArray *controllers;
myAppDelegate *appDelegate;
}
//inside .m file
@implementation RootViewController
@synthesize controllers;
- (void)viewDidLoad {
appDelegate = [[UIApplication sharedApplication] delegate];
self.controllers = appDelegate.topicControllers;
[super viewDidLoad];
}
Tôi chuột lên appdelegate để tìm thấy những lớp cơ sở dữ liệu helper và tài sản có chứa các đường cơ sở dữ liệu:
NSPathStore2 * appDelegate.databaseHeper.databasePath "/Users/userA/Library/Application Support/iPhone Simulator/User/Applications..."
DatabasePath được khai báo một NSString. Tại sao nó thay đổi thành NSPathStore2?
Khi tôi tiếp tục trong trình gỡ lỗi, một số điều kỳ lạ khác sẽ xảy ra. Khi tôi nhận được trong viewWillAppear, giá trị thuộc tính trở thành "không hợp lệ" và loại trở lại NSString. Mặc dù tôi đã nhìn thấy UIButton trong đó.
Tại sao nó thay đổi thành không hợp lệ? Tôi không thể sử dụng biến nữa.
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; //changes before this line executes
}
Tôi không làm gì giữa viewDidLoad và viewWillAppear. Sau đây là cách DatabasePath được gán trong lớp databaseHelper, mà xảy ra trước đây về applicationDidFinishLaunching:
- (NSString *) getDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:self.databaseName];
}
stringByAppendingPathComponent trả về một NSString. Tại sao tôi nhận được một NSStorePath2 đôi khi xuống đường sau khi chuyển nhượng?
Tôi có mọi thứ đang hoạt động mà không gặp vấn đề gì nhưng chỉ cần gọi [databaseHelper getDBpath]. Mục tiêu của tôi là để tiết kiệm một số chu kỳ CPU và lưu trữ giá trị đó. Do đó databasePath. Bất kỳ đề xuất nào tại sao databasePath thay đổi thành không hợp lệ?
Tại sao lại là downvotes? Đây là một câu hỏi tốt hơn là một số lượng tốt các câu hỏi nghèo mà nhận được tấn upvotes! –