Я пытаюсь использовать объект NSMutableArray
в качестве контейнера данных для хранения данных.
@property (retain, nonatomic) NSMutableArray* allTweets;
Я получаю JSON из сети и разбираю его на allTweets
. Однако я не могу перезагрузить данные с
[self.tableView reloadData];
Я получаю SIGABRT
на main.m
Я пытаюсь использовать strong
в свойстве. Это снова сбой. Когда я использую weak
, больше не происходит сбоя. Но все твиты всегда равны нулю.
- (void)viewDidLoad
{
[super viewDidLoad];
//* other codes *//
self.allTweets = [[NSMutableArray alloc]initWithCapacity:50];
[self getTimeline:nil];
}
-(void) parseTweetJSON:(NSData*) responseData
{
NSMutableArray* tempTweets = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
//convert each element in array into nsdictionary
for (NSDictionary *aTweet in tempTweets)
{
NSLog(@"%@ (by @%@)", [aTweet objectForKey:@"text"], [[aTweet objectForKey:@"user"] objectForKey:@"screen_name"]);
Tweet* theTweet = [[Tweet alloc]init];
theTweet.text = [aTweet valueForKey:@"text"];
theTweet.screenName = [[aTweet valueForKey:@"user"] valueForKey:@"screen_name"];
theTweet.createAt = [aTweet valueForKey:@"create_at"];
NSLog(@"class is %@", [[aTweet valueForKey:@"text"]class]);
[allTweets addObject:theTweet];
}
if([allTweets count]>0)
{
[self.tableView reloadData];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.textLabel.numberOfLines = 0;
cell.detailTextLabel.numberOfLines = 0;
}
NSInteger row = [indexPath row];
Tweet* aTweet = [[Tweet alloc]init];
aTweet = [allTweets objectAtIndex:row];
cell.textLabel.text = aTweet.screenName;
cell.detailTextLabel.text = aTweet.text;
return cell;
}
Какой тип свойства я должен использовать для NSMutableArray
, сохранить, скопировать, сильный.
Кстати, я использую Xcode 4.2
2011-11-28 02: 54: 23.968 Класс SparkTweet [2039: 10703] - __NSCFString
2011-11-28 02: 54: 23.969 SparkTweet [2039: 10703] - [Tweet
isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0x6e46c50
2011-11-28 02: 54: 23.970 SparkTweet [2039: 10703] * Завершение работы приложения
к необработанному исключению 'NSInvalidArgumentException', причина: '- [Tweet
isEqualToString:]: нераспознанный селектор, отправленный экземпляру 0x6e46c50 '
* Стек первого вызова вызова: (0x14c1052 0x189dd0a 0x14c2ced 0x1427f00 0x1427ce2 0x1b168f 0x4edf 0x24e548 0x250722 0x1007c7 0x1002c1 0x4371
0x14c2e72 0x98b9ef 0x149597f 0x13f8c39 0x13f8454 0x13f7db4 0x13f7ccb
0x1f8f879 0x1f8f93e 0x73a9b 0x2bf8 0x2b55 0x1) завершается, вызывается
выбрасывая исключение
Это исключение выдается на reloadData
. NSLog напечатал 20 последних твитов.
вот мой класс твит объявить
#import <Foundation/Foundation.h>
@interface Tweet : NSObject
{
NSString* name;
NSString* screenName;
NSString* text;
NSString* createAt;
}
@property (copy,nonatomic) NSString* name;
@property (copy,nonatomic) NSString* screenName;
@property (copy,nonatomic) NSString* text;
@property (copy,nonatomic) NSString* createAt;
@end