3 iphone xcode objective-c plist
我成功地将我的plist数组和字典加载到我的表中.我想在练习的详细视图中将exerciseName值设置为UILabel.
<array>
<dict>
<key>exercises</key>
<array>
<dict>
<key>exerciseDetail</key>
<string></string>
<key>exerciseName</key>
<string>Ab Crunch Machine</string>
</dict>
<dict>
<key>exerciseDetail</key>
<string></string>
<key>exerciseName</key>
<string>Ab Roller</string>
</dict>
</array>
<key>muscleName</key>
<string>Abdominals</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
练习细节现在是空白的,但最终会在相同练习的详细视图中加载UILabel或UITextView.
我猜我需要做一些事情
label.text =[[self.exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
Run Code Online (Sandbox Code Playgroud)
编辑:
对于我的exerciseViewController didSelectIndexAtRow我有:
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"exercises"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"exercises"];
Run Code Online (Sandbox Code Playgroud)
对于detailViewController的ViewDidLoad,我有:viewDidLoad for exerciseDetailView
self.navigationItem.title = @"Exercise Detail";
NSMutableArray *exerciseDetailArray = [[[NSUserDefaults alloc] objectForKey:@"exercises"] mutableCopy];
int indexValue = [[[NSUserDefaults alloc] valueForKey:@"exercises"] intValue];
name.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exerciseName"];
Run Code Online (Sandbox Code Playgroud)
控制台输出:
2011-03-19 22:52:08.279 Curl[32300:207] exercisedetalarray: (
{
exerciseDetail = "";
exerciseName = "Ab Crunch Machine";
},
{
exerciseDetail = "";
exerciseName = "Ab Roller";
},
{
exerciseDetail = "";
exerciseName = "Advanced Kettlebell Windmill";
},
{
exerciseName = "Air Bike";
},
{
exerciseName = "Alternate Heel Touchers";
},
{
exerciseName = "Barbell Ab Rollout";
},
{
exerciseName = "Barbell Side Bend";
},
{
exerciseName = "Bent Press";
},
{
exerciseName = "Bent-Knee Hip Raise";
},
{
exerciseName = "Butt-Ups";
},
{
exerciseName = "Cable Crunch";
}
Run Code Online (Sandbox Code Playgroud)
)
2011-03-19 22:52:08.280 Curl[32300:207] index value: 0
Run Code Online (Sandbox Code Playgroud)
使用MaserView NSDefault代码进行编辑:
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"InfoArray"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
Run Code Online (Sandbox Code Playgroud)
使用detailView NSUserDefaults代码进行编辑:
-(void)viewWillAppear:(BOOL)animated
{
NSMutableArray *exerciseDetailArray = [[[NSUserDefaults alloc] objectForKey:@"InfoArray"] mutableCopy];
int indexValue = [[[NSUserDefaults alloc] valueForKey:@"indexVal"] intValue];
name.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exerciseName"];
}
Run Code Online (Sandbox Code Playgroud)
@Faisal:
查看您的代码,我认为您的标签位于tableView下,因为您正在使用indexPath.row索引数组
你的想法看起来很正确.
步骤1:
从plist中检索数据到您的数组(Plist - > Array)
让我们说如果您的plist名称是Exercise.plist,那么您可以使用以下代码将您的数据检索到plist
NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"Exercise" ofType:@"plist"];
exerciseArray = [NSArray arrayWithContentsOfFile:plistPath];
Run Code Online (Sandbox Code Playgroud)
第2步:
从数组中获取数据到标签的文本(数组 - >标签文本)
然后使用下面的代码从数组值中设置UILabel的文本
label.text =[[exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
Run Code Online (Sandbox Code Playgroud)
注意:
要在masterView和detailView之间使用相同的数组,可以在masterView didSelectRowAtIndexPath中的NSUserDefaults中设置数组,并在detailView中检索相同的数组.
您可以使用以下代码执行此操作:
在masterView on didSelectRowAtIndexPath方法中:
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"InfoArray"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码在detailView中检索该数组:
NSMutableArray *exerciseDetailArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"InfoArray"] mutableCopy];
int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];
label.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exercises"];
Run Code Online (Sandbox Code Playgroud)
要么
NSArray *exerciseDetailArray = [[NSArray alloc] initWithContentsOfArray:[[NSUserDefaults alloc] objectForKey:@"InfoArray"]];
int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];
label.text =[[exerciseDetailArray objectAtIndex:indexValue] objectForKey:@"exercises"];
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助你:)
最终编辑:
didSelectRowAtIndexPath:用下面的方法替换你的方法SpecificExerciseTableViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
detailViewController.exerciseArray = [[self.exerciseArray objectAtIndex:indexPath.row]objectForKey:@"exercises"];
// Pass the selected object to the new view controller.
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setObject:exerciseArray forKey:@"InfoArray"];
[def setValue:[NSString stringWithFormat:@"%d",indexPath.row] forKey:@"indexVal"];
NSLog(@"Index inexpath:%d",indexPath.row);
int indexValue = [[[NSUserDefaults standardUserDefaults] valueForKey:@"indexVal"] intValue];
NSLog(@"index value master view: %d",indexValue);
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
Run Code Online (Sandbox Code Playgroud)
这肯定会工作:)