我遵循本教程:
http://www.raywenderlich.com/1845/ios-tutorial-how-to-create-a-simple-iphone-app-tutorial-part-2
我收到以下错误:
1.Property implementation must have its declaration in interface "RWTDetailViewController"
2.Property "data" not found on object of type "id"
这是我的代码:
#import "RWTScaryBugDoc.h"
#import "RWTScaryBugData.h"
#import "RWTUIImageExtras.h"
#import "RWTDetailViewController.h"
@interface RWTDetailViewController ()
- (void)configureView;
@end
@implementation RWTDetailViewController
#pragma mark - Managing the detail item
@synthesize picker = _picker;
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
self.rateView.notSelectedImage = [UIImage imageNamed:@"shockedface2_empty.png"];
self.rateView.halfSelectedImage = [UIImage imageNamed:@"shockedface2_half.png"];
self.rateView.fullSelectedImage = [UIImage imageNamed:@"shockedface2_full.png"];
self.rateView.editable = YES;
self.rateView.maxRating = 5;
self.rateView.delegate = self;
if (self.detailItem) {
self.titleField.text = self.detailItem.data.title;
self.rateView.rating = self.detailItem.data.rating;
self.imageView.image = self.detailItem.fullImage;
}
}
- (IBAction)titleFieldTextChanged:(id)sender
{
self.detailItem.data.title = self.titleField.text;
}
#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
#pragma mark RWTRateViewDelegate
- (void)rateView:(RWTRateView *)rateView ratingDidChange:(float)rating
{
self.detailItem.data.rating = rating;
}
- (IBAction)addPictureTapped:(id)sender {
if (self.picker == nil) {
self.picker = [[UIImagePickerController alloc] init];
self.picker.delegate = self;
self.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
self.picker.allowsEditing = NO;
}
[self presentViewController:_picker animated:YES completion:nil];
}
#pragma mark UIImagePickerControllerDelegate
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self dismissViewControllerAnimated:YES completion:nil];
UIImage *fullImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
UIImage *thumbImage = [fullImage imageByScalingAndCroppingForSize:CGSizeMake(44, 44)];
self.detailItem.fullImage = fullImage;
self.detailItem.thumbImage = thumbImage;
self.imageView.image = fullImage;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self configureView];
}
- (BOOL)shouldAutorotateToInterfaceOrientation
{
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
当我将@synthesize移动到interface-declaration中时,我出现以下错误:" Illegal interface qualifier"
任何人都可以帮助我吗?
这是我的.h文件:
#import <UIKit/UIKit.h>
#import "RWTRateView.h"
@interface RWTDetailViewController : UIViewController <UITextFieldDelegate, RWTRateViewDelegate, UIImagePickerControllerDelegate, UINavigationBarDelegate>
@property (strong, nonatomic) id detailItem;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet RWTRateView *rateView;
@property (weak, nonatomic) IBOutlet UITextField *titleField;
@property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
@property (strong, nonatomic) UIImagePickerController *picker;
- (IBAction)addPictureTapped:(id)sender;
- (IBAction)titleFieldTextChanged:(id)sender;
@end
答案 0 :(得分:0)
错误描述是自解释的,您需要在移动到实现(.m)文件并合成它之前,将选取器声明为接口(.h)文件中的属性。但是,您不再需要合成属性,但如果您这样做也很好 还有一件事,你错过了编程已经在.h文件中声明了这个属性的教程中的部分。您可以再看一下或将此行添加到 RWTDetailViewController.h
@property(强,非原子)UIImagePickerController *选择器;
修改强>
对于第二个错误,您将 detailItem 声明为 id 类型的对象,但是编写者正在使用自定义类 RWTScaryBugDoc ,他应该在其中使用名为 data 的属性。这就是因为属性 data 不属于 id 类型而导致错误的原因。您可能希望在教程结束时下载示例代码并交叉检查缺失点。
答案 1 :(得分:0)
您只需要先声明您的财产。因此,在界面(h文件或m文件的顶部)中,添加:
@property (nonatomic, strong)UIImagePickerController *picker;
@synthetise
需要留在实施中。
答案 2 :(得分:0)
您将self.detailItem声明为Id。 Id不是类,因此它没有属性,但是您尝试访问self.detailItem.data ....这是不可能的。 我无法帮你解决这个问题,因为你的代码中存在很多逻辑错误,其中99%对我来说没有任何意义。