2012-04-16 77 views
1

在xCode 4.2中,當我將identifier屬性設置爲故事板中的原型單元格時,在嘗試構建項目時出現錯誤Uncategorized - Compilation Failed設置標識符時表格視圖單元格錯誤

我不知道你需要什麼樣的所有信息,所以我把我的想法是有關...

首先,我有我設置內部表格視圖一個視圖控制器在Storyboard中。在表格視圖中,我放置了一個原型單元格。在原型單元格中,我放置了一個UIImageView和3個標籤。

我有一個稱爲DOR_SearchCustomCell .h和.m文件的自定義單元類。這裏是.h文件:

@interface DOR_SearchCustomCell : UITableViewCell { 

    __weak IBOutlet UIImageView *cellImage; 
    __weak IBOutlet UILabel *cellTitle; 
    __weak IBOutlet UILabel *cellText; 
    __weak IBOutlet UILabel *cellDistance; 
} 

@property (weak, nonatomic) IBOutlet UIImageView *cellImage; 
@property (weak, nonatomic) IBOutlet UILabel *cellTitle; 
@property (weak, nonatomic) IBOutlet UILabel *cellText; 
@property (weak, nonatomic) IBOutlet UILabel *cellDistance; 

@end 

與.m文件:

#import "DOR_SearchCustomCell.h" 

@implementation DOR_SearchCustomCell 

@synthesize cellImage; 
@synthesize cellTitle; 
@synthesize cellText; 
@synthesize cellDistance; 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

我的原型細胞有這個類集合爲它的自定義類,設置爲自定義樣式,標識設置爲specialsCell ,並且圖像和標籤綁定到類文件中的變量。

控制視圖控制器的類是DOR_SearchViewController,帶有.h和.m文件。 .h文件是:

#import <UIKit/UIKit.h> 
#import <sqlite3.h> 
#import "DOR_RestaurantClass.h" 
#import "DOR_SearchCustomCell.h" 

@class Reachability; 

@interface DOR_SearchViewController : UIViewController <UIActionSheetDelegate, NSURLProtocolClient, NSXMLParserDelegate, UITableViewDelegate, UITableViewDataSource> { 

    __weak IBOutlet UITableView *tblView; 

    NSMutableData *receivedData; 
    NSXMLParser* parser; 
    NSString *currentElement; 
    NSMutableString *currentElementValue; 
    NSMutableArray *listItems; 
    NSMutableArray *listOfIds; 
    NSMutableArray *listOfNames; 
    NSMutableArray *listOfDistances; 
    NSMutableArray *listOfImages; 
    NSMutableArray *listOfAddresses; 
    NSMutableArray *listOfAddresses2; 
    NSMutableArray *listOfAddresses3; 
    NSMutableArray *listOfDescriptions; 
    NSMutableArray *listOfPhones; 
} 

@property (weak, nonatomic) IBOutlet UITableView *tblView; 

@property (nonatomic, retain) NSMutableData *receivedData; 
@property (nonatomic, retain) NSXMLParser *parser; 
@property (nonatomic, retain) NSString *currentElement; 
@property (nonatomic, retain) NSMutableString *currentElementValue; 
@property (nonatomic, retain) NSMutableArray *listItems; 
@property (nonatomic, retain) NSMutableArray *listOfIds; 
@property (nonatomic, retain) NSMutableArray *listOfNames; 
@property (nonatomic, retain) NSMutableArray *listOfDistances; 
@property (nonatomic, retain) NSMutableArray *listOfImages; 
@property (nonatomic, retain) NSMutableArray *listOfAddresses; 
@property (nonatomic, retain) NSMutableArray *listOfAddresses2; 
@property (nonatomic, retain) NSMutableArray *listOfAddresses3; 
@property (nonatomic, retain) NSMutableArray *listOfDescriptions; 
@property (nonatomic, retain) NSMutableArray *listOfPhones; 

- (void)get_table_data; 

@end 

與.m文件:

#import "DOR_SearchViewController.h" 
#import "Reachability.h" 

@implementation DOR_SearchViewController 

@synthesize tblView; 

@synthesize receivedData; 
@synthesize parser; 
@synthesize currentElement; 
@synthesize currentElementValue; 
@synthesize listItems; 
@synthesize listOfIds; 
@synthesize listOfNames; 
@synthesize listOfDistances; 
@synthesize listOfImages; 
@synthesize listOfAddresses; 
@synthesize listOfAddresses2; 
@synthesize listOfAddresses3; 
@synthesize listOfDescriptions; 
@synthesize listOfPhones; 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    if (![[self loadSettings:@"view"] isEqualToString: @""]){ 
     [sortButton setTitle:[self loadSettings:@"view"] forState: (UIControlState)UIControlStateNormal]; 
    } 

    listItems = [[NSMutableArray alloc] init]; 
    listOfIds = [[NSMutableArray alloc] init]; 
    listOfNames = [[NSMutableArray alloc] init]; 
    listOfDistances = [[NSMutableArray alloc] init]; 
    listOfImages = [[NSMutableArray alloc] init]; 
    listOfAddresses = [[NSMutableArray alloc] init]; 
    listOfAddresses2 = [[NSMutableArray alloc] init]; 
    listOfAddresses3 = [[NSMutableArray alloc] init]; 
    listOfDescriptions = [[NSMutableArray alloc] init]; 
    listOfPhones = [[NSMutableArray alloc] init]; 
    [self get_table_data]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)get_table_data { 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.url.com/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

    if (theConnection) { 
     //NSLog (@"At connection"); 
     receivedData = [NSMutableData data]; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [receivedData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [receivedData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 

} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    if(parser){ 
     parser = nil; 
    } 

    parser = [[NSXMLParser alloc] initWithData: receivedData]; 
    [parser setDelegate: self]; 
    [parser setShouldResolveExternalEntities: YES]; 
    [parser parse]; 

    [tblView reloadData]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{ 
    //NSLog (@"At parser"); 
    currentElement = elementName; 

    if ([currentElement isEqualToString:@"restaurant_details"]) { 
     if ([currentElement isEqualToString:@"total_results"]) { 
      //NSLog(@"Element: %@", currentElement); 
     }else if ([currentElement isEqualToString:@"restaurant"]) { 
      restaurantObj = [[DOR_RestaurantClass alloc]init]; 
     } 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    //NSLog (@"At parser2"); 
    if(!currentElementValue) 
     currentElementValue=[[NSMutableString alloc] initWithString:string]; 
    else 
     [currentElementValue appendString:string]; 

    //NSLog(@"Name to be saved in Array :- %@",currentElement); 

    //NSLog(@"the parser just found this text in a tag:%@",currentElementValue); 
    if([currentElement isEqualToString:@"name"]) { 
     restaurantObj.name=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfNames addObject:currentElementValue]; 
     //NSLog(@"At Name | Array = %@", listOfNames); 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"distance_from_current_location"]) { 
     restaurantObj.distance=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfDistances addObject:string]; 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"restaurant_id"]) { 
     restaurantObj.restId=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfIds addObject:string]; 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"address"]) { 
     NSArray *stringArray = [currentElementValue componentsSeparatedByString:@" | "]; 
     restaurantObj.address=[stringArray objectAtIndex:0]; 
     restaurantObj.address2=[stringArray objectAtIndex:1]; 
     restaurantObj.address3=[stringArray objectAtIndex:2]; 
     [listOfAddresses addObject:[stringArray objectAtIndex:0]]; 
     [listOfAddresses2 addObject:[stringArray objectAtIndex:1]]; 
     [listOfAddresses3 addObject:[stringArray objectAtIndex:2]]; 
    }else{ 
     [email protected]""; 
     [email protected]""; 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"phone_number"]) { 
     restaurantObj.phone=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfPhones addObject:string]; 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"description"]) { 
     restaurantObj.description=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfDescriptions addObject:string]; 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"image_url"]) { 
     restaurantObj.image=[NSString stringWithFormat:@"%@",currentElementValue]; 
     [listOfImages addObject:string]; 
    }else{ 
     [email protected]""; 
    } 
    if([currentElement isEqualToString:@"restaurant_type"]) { 
     //restaurantObj.Name=[NSString stringWithFormat:@"%@",currentElementValue]; 
    }else{ 
     //[email protected]""; 
    } 
    [email protected]""; 

    //NSLog (@"ID Array: %@", restaurantObj); 
} 

-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName { 
    //NSLog(@"Current element in End Element Category:- %@",currentElement); 
    if([elementName isEqualToString:@"restaurant"]) { 
     //NSLog(@"Array: %@", restaurantObj); 
     //[listItems addObject:restaurantObj]; 
    }else{ 
     currentElementValue=nil; 
    } 

} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog (@"Table Cells: %d",[listOfIds count]); 
    return [listOfIds count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellID = @"specialsCell"; 

    DOR_SearchCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

    if (cell == nil){ 
     cell = [[DOR_SearchCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; 
    } 

    NSLog (@"Name: %@", [listOfNames objectAtIndex:indexPath.row]); 

    cell.cellTitle.text = [listOfNames objectAtIndex:indexPath.row]; 
    cell.cellText.text = [listOfDescriptions objectAtIndex:indexPath.row]; 
    cell.cellDistance.text = [listOfDistances objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [listOfNames objectAtIndex:indexPath.row]; 

    return cell; 
} 

@end 

如果我不把在小區標識符名稱中的故事板做的,我的項目編譯和我得到默認單元格樣式(當設置爲cell == nil時),這就是爲什麼我在底部添加了cell.textLabel.text部分用於測試目的。

我真的不知道爲iPhone編程太多。任何幫助將不勝感激。我發現的所有教程似乎都不適合我的項目(在視圖控制器中具有表格視圖),並且在我試圖實現它們時沒有工作。感謝所有迴應。如果您需要更多信息,請與我們聯繫。

回答

1

問題是您的UIImageView & UILabel網點源自您的原型單元格。

原型單元不是實際的單元;它充當真實情況的藍圖。當您將UIImageViews放入此藍圖單元格和THEN將它們通過網點綁定到您的課程時,Storyboard並不開心。你基本上試圖將抽象的東西與具體的東西聯繫起來。此時,故事板失敗,並提出這種不友好的構建錯誤。

在這個線程更多細節:What does the "Couldn't compile connection:" error mean?

+0

真棒,我會改變這一點,並再次嘗試,然後讓你知道它是如何工作的。謝謝。 – James 2012-05-15 15:28:41

+0

其實,我再次閱讀你的問題,你似乎在使用自定義單元格。在這種情況下,插座連接不應該有任何問題。無論如何,請查看構建日誌以查看實際導致此錯誤的原因。看看這個線程看看如何打開生成日誌:http://stackoverflow.com/questions/1488931/how-do-you-show-xcodes-build-log-trying-to-verify-if-iphone-distribution -buil – Guven 2012-05-15 15:59:28

相關問題