我已经创建了一个应用程序,将用户的位置与格式化的位置数组进行比较......
NSArray *myStationArray;
myStationArray = @[
@{
kStation : @"27200",
kLatitude : @( 41.656467),
kLongitude : @(-81.277963)
},
@{
kStation : @"27650",
kLatitude : @(41.657118),
kLongitude : @(-81.276545)
},
...
现在我希望用户能够动态创建这个数组,他们可以选择一个IBAction按钮,将其当前位置(lat long)添加到显示格式的可变数组中。 kStation值将由用户输入。我知道概念性问题是不受欢迎的,所以我会根据这个想法提出这些具体问题。
1。)我应该在哪里创建可变数组(viewDidLoad,IBAction,didUpdateToLocation等)?它需要保存到应用程序,以便用户可以在其整个生命周期中添加和删除它。
2.。)我的IBAction代码将保存当前位置和kStation输入以创建与上述示例匹配的数组?
3。)这是否是您想要使用sqlite等数据库的地方?如果可能的话,我宁愿避免使用数据库,但是想知道这样做的最佳方法。
感谢您提前的时间。
答案 0 :(得分:0)
您可能会为列表定义此NSMutableArray
作为类属性:
@property (nonatomic, strong) NSMutableArray *stations;
当您使用它时,您可以为您的文件名定义NSString
属性:
@property (nonatomic, strong) NSString *filename;
您可以在viewDidLoad
中加载以前的值或将其初始化,其中kFilename
设置为@"stations.plist"
或类似的内容:
NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
self.filename = [docsPath stringByAppendingPathComponent:kFilename];
if ([[NSFileManager defaultManager] fileExistsAtPath:self.filename])
self.stations = [NSMutableArray arrayWithContentsOfFile:self.filename];
else
self.stations = [NSMutableArray array];
您可以在IBAction
中添加新值(如果您希望在用户点击按钮时添加它们),或者在didUpdateToLocation
中添加新值(如果您希望将其作为用户自动添加)移动)。例如,如果您在IBAction
中执行了此操作:
- (IBAction)didTouchUpInsideAddButton:(id)sender
{
NSDictionary *newItem = @{
kStation : ..., // grab your station identifier however you want to do that
kLatitude : @(self.locationManager.location.coordinate.latitude),
kLongitude : @(self.locationManager.location.coordinate.longitude)
};
[self.stations addObject:newItem];
[self.stations writeToFile:self.filename atomically:YES];
}
如果您的电台列表可能变大,那么您可能需要考虑使用Core Data或SQLite,但如果此列表可能相当短(即您不介意将整个内容加载到同时记忆),上述通过arrayWithContentsOfFile
和writeToFile
使用plist的技术可能就足够了。
答案 1 :(得分:0)
按顺序回答您的问题:
1)你可能想在viewDidLoad中创建和初始化你的NSMutableArray。
2)您可以创建自己的类,类似MKAnnotation格式的类或创建字典,然后将其粘贴到数组中,如下所示:
-(IBAction)myButtonAction:(id)sender {
NSDictionary *myDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Station", @"27200", @"Latitude", @"41.656467", @"Longitude", @"-81.277963", nil];
[myArray addObject:myDictionary];
}
3)您可以像这样加载MutableArray文件:
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSMutableString *documentDirectory = [documentDirectories objectAtIndex:0];
NSString *myPath = [documentDirectory stringByAppendingPathComponent:@"UserData"];
NSMutableArray *myArray = [[NSMutableArray alloc] initWithContentsOfFile:myPath];
您可以像这样保存MutableArray文件:
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSMutableString *documentDirectory = [documentDirectories objectAtIndex:0];
NSString *filePath = [documentDirectory stringByAppendingPathComponent:@"UserData"];
BOOL fileError = [myArray writeToFile:filePath atomically:YES];