diff --git a/Localizable.strings b/Localizable.strings new file mode 100644 index 0000000..4a32a9c --- /dev/null +++ b/Localizable.strings @@ -0,0 +1,21 @@ +/* + Localizable.strings + iTunesSearch + + Created by Rafael Hieda on 11/03/15. + Copyright (c) 2015 joaquim. All rights reserved. +*/ + +/* English */ +/* Send */ +"sendKey" = "Search"; + + +/* Português */ +/* Send */ +"sendKey" = "Buscar"; + +/* French */ +/* Send */ +"sendKey" = "Recherche"; + diff --git a/README.md b/README.md index c0dc2a5..8dc96eb 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ###2) Adicione no cabeçalho da tabela um campo de texto e um botão para que o usuário escolha o termo a ser procurado. ###3) Use os recursos de internacionalização para permitir que o botão exiba a palavra Buscar, Search e Recherche para os idiomas Português, Inglês e Francês -##Desafio Prata +##Desafio Pratakljdfkldmnldknvddklzmnkz; ###1) Busque outros tipos de mídias (música, podcast, ebook); ###2) Mostre o resultado separado em sessões dentro da UITableView, as quais são identificadas pelo tipo da mídia. diff --git a/iTunesSearch.xcodeproj/project.pbxproj b/iTunesSearch.xcodeproj/project.pbxproj index 79e06d7..71f5ee3 100644 --- a/iTunesSearch.xcodeproj/project.pbxproj +++ b/iTunesSearch.xcodeproj/project.pbxproj @@ -13,10 +13,13 @@ 92C21CC11AAE757A0052ABE6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CC01AAE757A0052ABE6 /* Images.xcassets */; }; 92C21CD01AAE757A0052ABE6 /* iTunesSearchTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CCF1AAE757A0052ABE6 /* iTunesSearchTests.m */; }; 92C21CDB1AAE75B30052ABE6 /* iTunesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */; }; - 92C21CDD1AAE75DC0052ABE6 /* TableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */; }; 92C21CE11AAE76930052ABE6 /* TableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CDF1AAE76930052ABE6 /* TableViewCell.m */; }; 92C21CE21AAE76930052ABE6 /* TableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92C21CE01AAE76930052ABE6 /* TableViewCell.xib */; }; 92C21CE81AAE858E0052ABE6 /* Filme.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C21CE71AAE858E0052ABE6 /* Filme.m */; }; + E359CCA71AB37939002488AE /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E359CCA51AB37939002488AE /* DetailViewController.m */; }; + E359CCA81AB37939002488AE /* DetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E359CCA61AB37939002488AE /* DetailViewController.xib */; }; + E3CD94341AB0A7F60054848C /* Data.m in Sources */ = {isa = PBXBuildFile; fileRef = E3CD94331AB0A7F60054848C /* Data.m */; }; + E3CD94371AB0E1BC0054848C /* TableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3CD94391AB0E1BC0054848C /* TableView.xib */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -43,12 +46,20 @@ 92C21CCF1AAE757A0052ABE6 /* iTunesSearchTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iTunesSearchTests.m; sourceTree = ""; }; 92C21CD91AAE75B30052ABE6 /* iTunesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTunesManager.h; sourceTree = ""; }; 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iTunesManager.m; sourceTree = ""; }; - 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TableView.xib; sourceTree = ""; }; 92C21CDE1AAE76930052ABE6 /* TableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableViewCell.h; sourceTree = ""; }; 92C21CDF1AAE76930052ABE6 /* TableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewCell.m; sourceTree = ""; }; 92C21CE01AAE76930052ABE6 /* TableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TableViewCell.xib; sourceTree = ""; }; 92C21CE61AAE858E0052ABE6 /* Filme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Filme.h; path = Entidades/Filme.h; sourceTree = ""; }; 92C21CE71AAE858E0052ABE6 /* Filme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Filme.m; path = Entidades/Filme.m; sourceTree = ""; }; + E359CCA41AB37939002488AE /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; + E359CCA51AB37939002488AE /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; + E359CCA61AB37939002488AE /* DetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DetailViewController.xib; sourceTree = ""; }; + E3CD94321AB0A7F60054848C /* Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Data.h; sourceTree = ""; }; + E3CD94331AB0A7F60054848C /* Data.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Data.m; sourceTree = ""; }; + E3CD94381AB0E1BC0054848C /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/TableView.xib; sourceTree = ""; }; + E3CD943A1AB0E1C20054848C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TableView.xib; sourceTree = ""; }; + E3CD943B1AB0E1D60054848C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/TableView.strings; sourceTree = ""; }; + E3CD943C1AB0E1DE0054848C /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/TableView.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -96,9 +107,12 @@ 92C21CB81AAE757A0052ABE6 /* AppDelegate.m */, 92C21CBA1AAE757A0052ABE6 /* TableViewController.h */, 92C21CBB1AAE757A0052ABE6 /* TableViewController.m */, - 92C21CDC1AAE75DC0052ABE6 /* TableView.xib */, + E3CD94391AB0E1BC0054848C /* TableView.xib */, 92C21CD91AAE75B30052ABE6 /* iTunesManager.h */, 92C21CDA1AAE75B30052ABE6 /* iTunesManager.m */, + E359CCA41AB37939002488AE /* DetailViewController.h */, + E359CCA51AB37939002488AE /* DetailViewController.m */, + E359CCA61AB37939002488AE /* DetailViewController.xib */, 92C21CC01AAE757A0052ABE6 /* Images.xcassets */, 92C21CB31AAE757A0052ABE6 /* Supporting Files */, ); @@ -146,6 +160,8 @@ children = ( 92C21CE61AAE858E0052ABE6 /* Filme.h */, 92C21CE71AAE858E0052ABE6 /* Filme.m */, + E3CD94321AB0A7F60054848C /* Data.h */, + E3CD94331AB0A7F60054848C /* Data.m */, ); name = Entidades; sourceTree = ""; @@ -232,7 +248,8 @@ files = ( 92C21CC11AAE757A0052ABE6 /* Images.xcassets in Resources */, 92C21CE21AAE76930052ABE6 /* TableViewCell.xib in Resources */, - 92C21CDD1AAE75DC0052ABE6 /* TableView.xib in Resources */, + E3CD94371AB0E1BC0054848C /* TableView.xib in Resources */, + E359CCA81AB37939002488AE /* DetailViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -253,7 +270,9 @@ 92C21CBC1AAE757A0052ABE6 /* TableViewController.m in Sources */, 92C21CDB1AAE75B30052ABE6 /* iTunesManager.m in Sources */, 92C21CB91AAE757A0052ABE6 /* AppDelegate.m in Sources */, + E359CCA71AB37939002488AE /* DetailViewController.m in Sources */, 92C21CE81AAE858E0052ABE6 /* Filme.m in Sources */, + E3CD94341AB0A7F60054848C /* Data.m in Sources */, 92C21CE11AAE76930052ABE6 /* TableViewCell.m in Sources */, 92C21CB61AAE757A0052ABE6 /* main.m in Sources */, ); @@ -277,6 +296,20 @@ }; /* End PBXTargetDependency section */ +/* Begin PBXVariantGroup section */ + E3CD94391AB0E1BC0054848C /* TableView.xib */ = { + isa = PBXVariantGroup; + children = ( + E3CD94381AB0E1BC0054848C /* en */, + E3CD943A1AB0E1C20054848C /* Base */, + E3CD943B1AB0E1D60054848C /* fr */, + E3CD943C1AB0E1DE0054848C /* pt */, + ); + name = TableView.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ 92C21CD11AAE757A0052ABE6 /* Debug */ = { isa = XCBuildConfiguration; diff --git a/iTunesSearch/AppDelegate.m b/iTunesSearch/AppDelegate.m index d513fd8..1e464c4 100644 --- a/iTunesSearch/AppDelegate.m +++ b/iTunesSearch/AppDelegate.m @@ -28,7 +28,9 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( #warning Adicionado codigo para iniciar com a interface do TableView // TableViewController *tvc = [[TableViewController alloc] initWithNibName:@"TableView" bundle:nil]; TableViewController *tvc = [[TableViewController alloc] init]; - [self.window setRootViewController:tvc]; + [tvc setTitle:@"iTunes Search"]; + UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:tvc]; + [self.window setRootViewController:nvc]; [self.window makeKeyAndVisible]; return YES; } diff --git a/iTunesSearch/Base.lproj/TableView.xib b/iTunesSearch/Base.lproj/TableView.xib new file mode 100644 index 0000000..c6ed022 --- /dev/null +++ b/iTunesSearch/Base.lproj/TableView.xib @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iTunesSearch/Data.h b/iTunesSearch/Data.h new file mode 100644 index 0000000..982c547 --- /dev/null +++ b/iTunesSearch/Data.h @@ -0,0 +1,19 @@ +// +// Data.h +// iTunesSearch +// +// Created by Rafael Hieda on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import + +@interface Data : NSObject +@property(nonatomic, strong) NSString *name; +@property(nonatomic, strong) NSString *title; +@property(nonatomic, strong) NSString *price; +@property(nonatomic, strong) NSString *mediaType; +@property(nonatomic, strong) NSString *currency; +@property(nonatomic, strong) NSString *country; + +@end diff --git a/iTunesSearch/Data.m b/iTunesSearch/Data.m new file mode 100644 index 0000000..e8b6ba1 --- /dev/null +++ b/iTunesSearch/Data.m @@ -0,0 +1,13 @@ +// +// Data.m +// iTunesSearch +// +// Created by Rafael Hieda on 11/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "Data.h" + +@implementation Data + +@end diff --git a/iTunesSearch/DetailViewController.h b/iTunesSearch/DetailViewController.h new file mode 100644 index 0000000..aa1242f --- /dev/null +++ b/iTunesSearch/DetailViewController.h @@ -0,0 +1,21 @@ +// +// DetailViewController.h +// iTunesSearch +// +// Created by Rafael Hieda on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import +#import "Data.h" + +@interface DetailViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UILabel *artistLabel; +@property (weak, nonatomic) IBOutlet UILabel *mediaLabel; +@property (weak, nonatomic) IBOutlet UILabel *priceLabel; +@property (weak, nonatomic) IBOutlet UILabel *countryLabel; + +@property(strong, nonatomic) Data *data; + +@end diff --git a/iTunesSearch/DetailViewController.m b/iTunesSearch/DetailViewController.m new file mode 100644 index 0000000..ad07025 --- /dev/null +++ b/iTunesSearch/DetailViewController.m @@ -0,0 +1,48 @@ +// +// DetailViewController.m +// iTunesSearch +// +// Created by Rafael Hieda on 13/03/15. +// Copyright (c) 2015 joaquim. All rights reserved. +// + +#import "DetailViewController.h" + +@interface DetailViewController () + +@end + +@implementation DetailViewController +@synthesize data; + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + + [_artistLabel setText: [data name]]; + + [_mediaLabel setText:[data mediaType]]; + + [_countryLabel setText: [data country]]; + + [_priceLabel setText: [NSString stringWithFormat: @"%@: %@", [data currency], [data price]]]; + + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/iTunesSearch/DetailViewController.xib b/iTunesSearch/DetailViewController.xib new file mode 100644 index 0000000..21d16b5 --- /dev/null +++ b/iTunesSearch/DetailViewController.xib @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iTunesSearch/Entidades/Filme.h b/iTunesSearch/Entidades/Filme.h index eb126dc..0e76198 100644 --- a/iTunesSearch/Entidades/Filme.h +++ b/iTunesSearch/Entidades/Filme.h @@ -16,5 +16,6 @@ @property (nonatomic, strong) NSString *duracao; @property (nonatomic, strong) NSString *genero; @property (nonatomic, strong) NSString *pais; +@property (nonatomic, strong) NSString *preco; @end diff --git a/iTunesSearch/TableView.xib b/iTunesSearch/TableView.xib deleted file mode 100644 index 55f128c..0000000 --- a/iTunesSearch/TableView.xib +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iTunesSearch/TableViewCell.h b/iTunesSearch/TableViewCell.h index b630349..8bc5f9e 100644 --- a/iTunesSearch/TableViewCell.h +++ b/iTunesSearch/TableViewCell.h @@ -12,6 +12,7 @@ @property (weak, nonatomic) IBOutlet UILabel *nome; @property (weak, nonatomic) IBOutlet UILabel *tipo; - +@property (weak, nonatomic) IBOutlet UILabel *pais; +@property (weak, nonatomic) IBOutlet UILabel *duracao; @end diff --git a/iTunesSearch/TableViewCell.xib b/iTunesSearch/TableViewCell.xib index bf8bd3f..89f6a48 100644 --- a/iTunesSearch/TableViewCell.xib +++ b/iTunesSearch/TableViewCell.xib @@ -1,5 +1,5 @@ - + @@ -7,8 +7,8 @@ - - + + @@ -17,7 +17,7 @@ + + + + + + + + + - + diff --git a/iTunesSearch/TableViewController.h b/iTunesSearch/TableViewController.h index 0cbb5c4..5b1ccc1 100644 --- a/iTunesSearch/TableViewController.h +++ b/iTunesSearch/TableViewController.h @@ -8,10 +8,15 @@ #import -@interface TableViewController : UIViewController +@interface TableViewController : UIViewController @property (strong, nonatomic) IBOutlet UITableView *tableview; +- (IBAction)searchButton:(id)sender; +@property (weak, nonatomic) IBOutlet UITextField *textField; + +@property (weak, nonatomic) IBOutlet UISegmentedControl *segControl; +- (IBAction) segControlClicked:(id)sender; @end diff --git a/iTunesSearch/TableViewController.m b/iTunesSearch/TableViewController.m index f689980..2333fdd 100644 --- a/iTunesSearch/TableViewController.m +++ b/iTunesSearch/TableViewController.m @@ -10,28 +10,66 @@ #import "TableViewCell.h" #import "iTunesManager.h" #import "Entidades/Filme.h" +#import "Data.h" +#import "DetailViewController.h" @interface TableViewController () { NSArray *midias; + NSString *termo; + NSString *tipoMidia; + iTunesManager *itunes; + NSString *mediaType; + } + @end + + @implementation TableViewController - (void)viewDidLoad { [super viewDidLoad]; - + termo = @"Apple"; + mediaType = @"all"; UINib *nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil]; [self.tableview registerNib:nib forCellReuseIdentifier:@"celulaPadrao"]; + NSLog(@" %@", termo); + + + + + + itunes = [iTunesManager sharedInstance]; + //midias = [itunes buscarMidias:termo]; + - iTunesManager *itunes = [iTunesManager sharedInstance]; - midias = [itunes buscarMidias:@"Apple"]; #warning Necessario para que a table view tenha um espaco em relacao ao topo, pois caso contrario o texto ficara atras da barra superior - self.tableview.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableview.bounds.size.width, 15.f)]; + //self.tableview.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 20.0f, self.tableview.bounds.size.width, 60.0f)]; + + + + + + + + + /* HEADER VIEW */ + +// UITextField *teste = [[UITextField alloc]initWithFrame:CGRectMake(10.0f, 10.0f, 200.0f, 25.0f)]; +// [teste setBackgroundColor:[UIColor whiteColor]]; + +// [_tableview.tableHeaderView setBackgroundColor:[[UIColor redColor]colorWithAlphaComponent:0.5f]]; +// _tableview.tableHeaderView.layer.borderColor=[UIColor blackColor].CGColor; +// _tableview.tableHeaderView.layer.borderWidth=1.0f; +// +// [_tableview addSubview: teste]; + + } - (void)didReceiveMemoryWarning { @@ -42,27 +80,159 @@ - (void)didReceiveMemoryWarning { #pragma mark - Metodos do UITableViewDataSource -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; + + return 1 ; + } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [midias count]; + + return [[midias objectAtIndex:_segControl.selectedSegmentIndex]count]; + } + +-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + if(_segControl.selectedSegmentIndex == 0) + return @"podcast"; + else if (_segControl.selectedSegmentIndex ==1) + return @"music"; + else if (_segControl.selectedSegmentIndex == 2) + return @"movies"; + else if (_segControl.selectedSegmentIndex ==3) + return @"ebook"; + else + return @"all"; } + -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - TableViewCell *celula = [self.tableview dequeueReusableCellWithIdentifier:@"celulaPadrao"]; - Filme *filme = [midias objectAtIndex:indexPath.row]; + //Implementação de aula + +// TableViewCell *celula = [self.tableview dequeueReusableCellWithIdentifier:@"celulaPadrao"]; +// +// Filme *filme = [midias objectAtIndex:indexPath.row]; +// +// [celula.nome setText:filme.nome]; +// [celula.tipo setText:@"Filme"]; +// [celula.pais setText: filme.pais]; +// //[celula.duracao setText:[NSString stringWithFormat:@"$: %@", filme.duracao]]; +// [celula.duracao setText: [NSString stringWithFormat:@"preco: %@", filme.preco]]; +// +// return celula; +// + + //Minha implementação + TableViewCell *cell = [self.tableview dequeueReusableCellWithIdentifier:@"celulaPadrao"]; + + Data *data = [[midias objectAtIndex:_segControl.selectedSegmentIndex]objectAtIndex:indexPath.row]; - [celula.nome setText:filme.nome]; - [celula.tipo setText:@"Filme"]; - return celula; + + NSLog(@"\n\n nome: %@", data.name); + [cell.nome setText: data.title]; + [cell.tipo setText: data.mediaType]; + [cell.pais setText: data.country]; + [cell.duracao setText: [NSString stringWithFormat:@" %@: %@", data.currency, data.price]]; + + + return cell; + } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 70; } +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + [_textField resignFirstResponder]; +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + DetailViewController *detailViewController = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil]; + + + + + Data *data = [[Data alloc]init]; + data = [[midias objectAtIndex:_segControl.selectedSegmentIndex]objectAtIndex:indexPath.row]; + + + [detailViewController setTitle:[data title]]; + [detailViewController setData:data]; + [self.navigationController pushViewController:detailViewController animated:YES]; +} + + + +#pragma mark - implementações extras + +- (IBAction)searchButton:(id)sender { + termo = [[self textField]text]; + + NSRange range = NSMakeRange(0, termo.length); + NSRegularExpression *regex = [self regularExpressionWithString:termo]; + NSString *newTermo = [regex stringByReplacingMatchesInString:termo options:NO range:range withTemplate:termo]; + + NSString *urlTerm = [newTermo stringByReplacingOccurrencesOfString:@" " withString:@"+"]; + NSLog(@"texto: %@", [[self textField]text]); + NSLog(@"texto: %@", newTermo); +// NSString *urlTerm = [termo stringByReplacingOccurrencesOfString:@" " withString:@"+"]; +// NSLog(@"texto: %@", termo); + + midias = [itunes buscarMidias:urlTerm]; + [_tableview reloadData]; + + +} + +-(NSRegularExpression *)regularExpressionWithString:(NSString *)string +{ + NSError *error = NULL; + NSString *placeHolder = @"[a-zA-Z0-9]* [a-zA-Z0-9]* [a-zA-Z0-9]*"; + NSString *pattern = [NSString stringWithFormat:placeHolder,string]; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NO error:&error]; + if(error) + { + NSLog(@"Não foi possivel criar uma expressão regular dada a string utilizada"); + } + return regex; +} + + + + +-(IBAction)segControlClicked:(id)sender +{ + if (_segControl.selectedSegmentIndex == 0) + { + [_tableview reloadData]; + + } + + else + if( _segControl.selectedSegmentIndex == 1) + { + + [_tableview reloadData]; + + } + else + if(_segControl.selectedSegmentIndex == 2) + { + [_tableview reloadData]; + + } + else + if (_segControl.selectedSegmentIndex == 3) + { + [_tableview reloadData]; + + } +} + + @end diff --git a/iTunesSearch/en.lproj/TableView.xib b/iTunesSearch/en.lproj/TableView.xib new file mode 100644 index 0000000..31c691c --- /dev/null +++ b/iTunesSearch/en.lproj/TableView.xib @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iTunesSearch/fr.lproj/TableView.strings b/iTunesSearch/fr.lproj/TableView.strings new file mode 100644 index 0000000..08b6b66 --- /dev/null +++ b/iTunesSearch/fr.lproj/TableView.strings @@ -0,0 +1,15 @@ + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[0] = "Podcast"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[0]" = "Podcast"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[1] = "Music"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[1]" = "Musique"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[2] = "Movie"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[2]" = "Film"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[3] = "E-Book"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[3]" = "E-Book"; + +/* Class = "UIButton"; normalTitle = "Send"; ObjectID = "qZq-0V-4yg"; */ +"qZq-0V-4yg.normalTitle" = "Envoyer"; diff --git a/iTunesSearch/iTunesManager.h b/iTunesSearch/iTunesManager.h index c0e366b..442ed63 100644 --- a/iTunesSearch/iTunesManager.h +++ b/iTunesSearch/iTunesManager.h @@ -14,8 +14,23 @@ * gets singleton object. * @return singleton */ + +@property NSMutableArray *podcastArray; + +@property NSMutableArray *musicArray; + +@property NSMutableArray *movieArray; + +@property NSMutableArray *ebookArray; + +@property NSMutableArray *dataArray; + + (iTunesManager*)sharedInstance; - (NSArray *)buscarMidias:(NSString *)termo; +-(NSDictionary *)results:(NSString *)termo; + +-(NSDictionary *)results:(NSString *)termo media:(NSString *)media; + @end diff --git a/iTunesSearch/iTunesManager.m b/iTunesSearch/iTunesManager.m index e2babda..223155b 100644 --- a/iTunesSearch/iTunesManager.m +++ b/iTunesSearch/iTunesManager.m @@ -8,13 +8,15 @@ #import "iTunesManager.h" #import "Entidades/Filme.h" - +#import "Data.h" @implementation iTunesManager static iTunesManager *SINGLETON = nil; static bool isFirstAccess = YES; +@synthesize podcastArray,musicArray,movieArray,ebookArray,dataArray; + #pragma mark - Public Method + (id)sharedInstance @@ -29,43 +31,161 @@ + (id)sharedInstance } -- (NSArray *)buscarMidias:(NSString *)termo { - if (!termo) { - termo = @""; +//- (NSArray *)buscarMidias:(NSString *)termo { +// if (!termo) { +// termo = @""; +// } +// //url do JSON +// NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&media=all", termo]; +// //arquivo NSData que armazena o conteúdo do JSON gerado pelo iTunes +// NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; +// +// +// NSError *error; +// +// NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData +// options:NSJSONReadingMutableContainers +// error:&error]; +// if (error) { +// NSLog(@"Não foi possível fazer a busca. ERRO: %@", error); +// return nil; +// } +// +// NSArray *resultados = [resultado objectForKey:@"results"]; +// NSMutableArray *filmes = [[NSMutableArray alloc] init]; +// +// for (NSDictionary *item in resultados) { +// Filme *filme = [[Filme alloc] init]; +// [filme setNome:[item objectForKey:@"trackName"]]; +// [filme setTrackId:[item objectForKey:@"trackId"]]; +// [filme setArtista:[item objectForKey:@"artistName"]]; +// [filme setDuracao: [item objectForKey:@"trackTimeMillis"]]; +// [filme setGenero:[item objectForKey:@"primaryGenreName"]]; +// [filme setPais:[item objectForKey:@"country"]]; +// [filme setPreco: [item objectForKey:@"trackPrice"]]; +// [filmes addObject:filme]; +// } +// +// return filmes; +//} + +#pragma mark - Implementações exercicios + +-(NSArray *) buscarMidias:(NSString *)termo +{ + + NSLog(@"antes do dictionary"); + + NSArray *resultados = [[self results:termo] objectForKey:@"results"]; + dataArray = [[NSMutableArray alloc]init]; + podcastArray = [[NSMutableArray alloc]init]; + musicArray = [[NSMutableArray alloc]init]; + ebookArray = [[NSMutableArray alloc]init]; + movieArray = [[NSMutableArray alloc]init]; + + for(NSDictionary *item in resultados) + { + + Data *data = [[Data alloc]init]; + [data setName:[item objectForKey:@"artistName"]]; + [data setTitle:[item objectForKey: @"trackName"]]; + [data setPrice:[item objectForKey: @"trackPrice"]]; + [data setCurrency:[item objectForKey:@"currency"]]; + [data setMediaType:[item objectForKey:@"kind"]]; + [data setCountry:[item objectForKey:@"country"]]; + NSLog(@"%@", data.name); + NSLog(@"%@", data.country); + NSLog(@"%@", data.mediaType); + [dataArray addObject: data]; + + if([[item objectForKey:@"kind"] isEqual: @"podcast"] ) + [podcastArray addObject: data]; + else if([[item objectForKey:@"kind"] isEqual: @"song"]) + [musicArray addObject:data]; + else if([[item objectForKey:@"kind"]isEqual:@"feature-movie"]) + [movieArray addObject: data]; + else if([[item objectForKey:@"kind"]isEqual:@"ebook"]) + [ebookArray addObject:data]; + + } - NSString *url = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&media=movie", termo]; + //um bloco que trata especificamente do caso do ebook que não está incluído em "all" + + NSArray *resultadosEbook = [[self results: termo media:@"ebook"]objectForKey:@"results"]; + + for(NSDictionary *item in resultadosEbook) + { + + Data *data = [[Data alloc]init]; + [data setName:[item objectForKey:@"artistName"]]; + [data setTitle:[item objectForKey: @"trackName"]]; + [data setPrice:[item objectForKey: @"price"]]; + [data setCurrency:[item objectForKey:@"currency"]]; + [data setMediaType:[item objectForKey:@"kind"]]; + [data setCountry:[item objectForKey:@"country"]]; + NSLog(@"%@", data.name); + NSLog(@"%@", data.country); + NSLog(@"%@", data.mediaType); + + [dataArray addObject: data]; + if([[item objectForKey:@"kind"]isEqual:@"ebook"]) + [ebookArray addObject:data]; + } + + NSArray *mediaArray = [NSArray arrayWithObjects:podcastArray,musicArray,movieArray,ebookArray, nil]; + return mediaArray; +} + +//metodo para gerar o dictionary com os dados parseados do json +-(NSDictionary *)results:(NSString *)termo +{ + if(!termo) + { + termo = @""; + } + NSString *url = [NSString stringWithFormat: @"https://itunes.apple.com/search?term=%@&media=all", termo]; NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; NSError *error; NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; - if (error) { - NSLog(@"Não foi possível fazer a busca. ERRO: %@", error); + if(error) + { + NSLog(@"Erro: %@", error); return nil; } + return resultado; +} + +//metodo sobrecarregado para buscar outras midias +//de algum modo ebook não vem em "all" +-(NSDictionary *) results:(NSString *)termo media:(NSString *)media +{ + if(!termo) + { + termo = @""; + } + NSString *url = [NSString stringWithFormat: @"https://itunes.apple.com/search?term=%@&media=%@", termo,media]; + NSData *jsonData = [NSData dataWithContentsOfURL: [NSURL URLWithString:url]]; - NSArray *resultados = [resultado objectForKey:@"results"]; - NSMutableArray *filmes = [[NSMutableArray alloc] init]; - - for (NSDictionary *item in resultados) { - Filme *filme = [[Filme alloc] init]; - [filme setNome:[item objectForKey:@"trackName"]]; - [filme setTrackId:[item objectForKey:@"trackId"]]; - [filme setArtista:[item objectForKey:@"artistName"]]; - [filme setDuracao:[item objectForKey:@"trackTimeMillis"]]; - [filme setGenero:[item objectForKey:@"primaryGenreName"]]; - [filme setPais:[item objectForKey:@"country"]]; - [filmes addObject:filme]; + NSError *error; + NSLog(@"erro parse resultado"); + NSDictionary *resultado = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:&error]; + if(error) + { + NSLog(@"Erro: %@", error); + return nil; } - return filmes; + return resultado; } - #pragma mark - Life Cycle + (id) allocWithZone:(NSZone *)zone diff --git a/iTunesSearch/pt.lproj/TableView.strings b/iTunesSearch/pt.lproj/TableView.strings new file mode 100644 index 0000000..a14ed1e --- /dev/null +++ b/iTunesSearch/pt.lproj/TableView.strings @@ -0,0 +1,15 @@ + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[0] = "Podcast"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[0]" = "Podcast"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[1] = "Music"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[1]" = "Musica"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[2] = "Movie"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[2]" = "Filmes"; + +/* Class = "UISegmentedControl"; Kj1-gZ-MYa.segmentTitles[3] = "E-Book"; ObjectID = "Kj1-gZ-MYa"; */ +"Kj1-gZ-MYa.segmentTitles[3]" = "E-Book"; + +/* Class = "UIButton"; normalTitle = "Send"; ObjectID = "qZq-0V-4yg"; */ +"qZq-0V-4yg.normalTitle" = "Enviar";