Это мой первый пост.Я боялся что-то публиковать, так как я новичок в C ++, но я должен сказать, что мне кажется, что я довольно быстро освоился, так как я опытный разработчик html, css, javascript.
Хорошо, я в порядке.работая над этим проектом, который реализует Twitter и Matts TwitterEngine, и все начинает сходиться.У меня есть табличное представление, собирающее временную шкалу пользователя, который входит в систему. Вы можете создавать твиты и видеть временную шкалу, но у меня возникают некоторые проблемы при попытке включить атрибут "@" user ".
У меня естьпришли к выводу, что это потому, что это NSDictionary с несколькими массивами внутри самого себя. Например, @user состоит из User, scree_name, ect, так что вот некоторый код, чтобы посмотреть, может ли кто-нибудь помочь мне разобраться в этом немного.
В файле .h NSObject я буду вызывать
-(NSString*)author;
В файле .m
@implementation Tweet
-(id)initWithTweetDictionary:(NSDictionary*)_contents {
if(self == [super init]) {
contents = _contents;
[contents retain];
}
return self;
}
-(NSString*)author {
return [[contents objectForKey:@"user"] objectForKey:@"screen_name"];
}
Теперь я обращаюсь к немуПосмотрите и верьте, что у меня есть проблемы, потому что я все еще изучаю массивы и изменяемые массивы и не знаю, что вызывать.
В моем TwitterViewController.h я сначала, очевидно, импортирую SA_OAuth-движок и контроллер, которые работают нормально, затем я использую два MutableArrays, такие какниже
MGTwitterEngine *_twitter;
SA_OAuthTwitterEngine *_engine;
NSMutableArray *tweets;
NSMutableArray *authors;
в twitterview.m Я импортирую первый .h, а затем вызываю
//Connect to twitter API
- (void)viewDidAppear:(BOOL)animated {
if(_engine) return;
_engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
_engine.consumerKey = @"key here =P";
_engine.consumerSecret = @"secret here =P";
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];
if (controller)
[self presentModalViewController: controller animated: YES];
else {
tweets = [[NSMutableArray alloc] init];
authors = [[NSMutableArray alloc] init];
Затем я возвращаю счет того МуtableArray и попытайтесь отобразить его рядом с твитами, чтобы он отображал экранное имя лиц реального твита на временной шкале
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *identifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
//add subtitle
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}
[cell.textLabel setNumberOfLines:7];
[cell.textLabel setText:[(Tweet*)[tweets objectAtIndex:indexPath.row] tweet]];
//-------THIS IS WHERE I KEEP GETTING A SIGBRT DURING LOAD "dump saying return count 0-----------[cell.textLabel setText:[(Tweet*)[authors objectAtIndex:indexPath.row] author]];------
//[cell.detailTextLabel setText:[(Tweet*)[retweetCount objectAtIndex:indexPath.row] reTweetCount]];
#pragma mark SA_OAuthTwitterController Delegate
- (void) OAuthTwitterController: (SA_OAuthTwitterController *) controller authenticatedWithUsername: (NSString *) username {
NSLog(@"Authenticated with user %@", username);
tweets = [[NSMutableArray alloc] init];
authors =[[NSMutableArray alloc] init];
[self updateStream:nil];
}
- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier {
tweets = [[NSMutableArray alloc] init];
for(NSDictionary *d in statuses) {
NSLog(@"See dictionary: %@", d);
Tweet *tweet = [[Tweet alloc] initWithTweetDictionary:d];
[tweets addObject:tweet];
[retweetCount addObject:tweet];
[tweet release];
}
[self.tableView reloadData];
}
- (void)userInfoReceived:(NSArray *)userInfo forRequest:(NSString *)connectionIdentifier {
authors = [[NSMutableArray alloc] init];
for (NSDictionary *d in userInfo) {
NSLog(@"See dictionary: %@", d);
Tweet *tweet = [[Tweet alloc] initWithTweetDictionary:d];
[authors addObject:tweet];
[tweet release];
}
[self.tableView reloadData];
}
Так, как я уже сказал, «твиты» работают, и я могу добавить другие объекты с помощьюМетод addObject, такой как счетчик ретвитов, но я не могу понять, почему я не могу получить отображаемое имя пользователя в ячейке !!!
Я также в конечном итоге хочу Async с аватарами и добавить кнопку RT, так что если у кого-нибудь есть какие-либо предложения по ЛЕГКОМУ способу реализации тех, которые были бы также хороши!
Я ценю любую помощь, которую могу получить !!!Спасибо, надеюсь услышать от кого-нибудь в скором времени, чтобы помочь мне рассказать о NSDictionary, NSArrays и MutableArrays, потому что я считаю, что именно в этом и заключается проблема.Или, может быть, я просто не заполняю таблицу правильно, каким бы человеком я ни оказался, я могу помочь!
Искренне спасибо
Энтони
DUMP:
2011-05-29 03:27:21.477 ThemeCatcher[10409:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'
*** Call stack at first throw:
(
0 CoreFoundation 0x01524be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x016795c2 objc_exception_throw + 47
2 CoreFoundation 0x0151a6e5 -[__NSArrayM objectAtIndex:] + 261
3 ThemeCatcher 0x00024498 -[TwitterVeiwController tableView:cellForRowAtIndexPath:] + 600
4 UIKit 0x008037fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
5 UIKit 0x007f977f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
6 UIKit 0x0080e450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
7 UIKit 0x00806538 -[UITableView layoutSubviews] + 242
8 QuartzCore 0x004a8451 -[CALayer layoutSublayers] + 181
9 QuartzCore 0x004a817c CALayerLayoutIfNeeded + 220
10 QuartzCore 0x004a137c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
11 QuartzCore 0x004a10d0 _ZN2CA11Transaction6commitEv + 292
12 QuartzCore 0x004d17d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
13 CoreFoundation 0x01505fbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
14 CoreFoundation 0x0149b0e7 __CFRunLoopDoObservers + 295
15 CoreFoundation 0x01463bd7 __CFRunLoopRun + 1575
16 CoreFoundation 0x01463240 CFRunLoopRunSpecific + 208
17 CoreFoundation 0x01463161 CFRunLoopRunInMode + 97
18 GraphicsServices 0x01f42268 GSEventRunModal + 217
19 GraphicsServices 0x01f4232d GSEventRun + 115
20 UIKit 0x0079e42e UIApplicationMain + 1160
21 ThemeCatcher 0x00002c29 main + 121
22 ThemeCatcher 0x00002ba5 start + 53
23 ??? 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
Current language: auto; currently objective-c
(gdb)
ОБНОВЛЕНО !!!!!!Хотите опубликовать мое решение, если другие читают это.Я ненавижу просматривать посты, и пользователи находят своего пользователя, но не делятся своим решением, чтобы помочь другим в будущем.Так что я не стану этим парнем и не расскажу всем, как я заставил это работать!
Решение:
Сначала Правильно вызывайте свои массивы, как говорит Дэнни ниже. НЕ следуйте тому методу, которым я был, это может стать проблемой для вас позже в будущем.«Я все еще использовал MutableArray для обоих вызовов, но попытаюсь измениться в ближайшем будущем.
Теперь убедитесь, что все массивы отформатированы правильно, и« соедините ваши точки »= P. Но вот Kicker! Ниже приведена частьMGTwitterEngine, который объясняет мою проблему. Сначала я вызывал целое число «1», которое, по мнению движка, я пытался получить по одному «screen_name» для целого массива пользователей, поэтому очевидно, что это будет SIGABRT и сказать, что WTH вы пытаетесьделать здесь! = P
Просто хочу уточнить, что я говорил ранее о целых числах и определении пользователя. В
MGTwitterRequestTypes.h towards the bottom theres this line of code:typedef enum _
MGTwitterResponseType {
MGTwitterStatuses = 0, // one or more statuses
MGTwitterStatus = 1, // exactly one status
MGTwitterUsers = 2, // one or more user's information
MGTwitterUser = 3, // info for exactly one user
MGTwitterDirectMessages = 4, // one or more direct messages
MGTwitterDirectMessage = 5, // exactly one direct message
MGTwitterGeneric = 6, // a generic response not requiring parsing
MGTwitterMiscellaneous = 8, // a miscellaneous response of key-value pairs
MGTwitterImage = 7, // an image
#if YAJL_AVAILABLE
MGTwitterSearchResults = 9, // search results
#endif
} MGTwitterResponseType;
// Этот ключ добавляется к каждому возвращенному твиту или прямому сообщению, // со значением NSNumber, содержащим MGTwitterRequestType. // Это разработано, чтобы помочь клиентским приложениям агрегировать обновления.
определить TWITTER_SOURCE_REQUEST_TYPE @ "source_api_request_type"
Я надеюсь, что помогу другим выполнитьдобавив scree_name ... и в основном вы можете использовать это для любой "текстовой" информации внутри там, такойкак ReTweet рассчитывает на ...Теперь мне нужно выяснить, как загрузить изображения их профиля в табличном виде .... У меня есть загрузка изображений с этой строкой кода, но по какой-то странной причине он не загружается в табличное представление.Он даже корректно выдвигает текст, как будто это изображение, но там нет ни одного
Любые предложения по этому поводу будут с благодарностью !!!
NSString *imageurl = [avatarsURL objectAtIndex:0];
NSLog(@"http://api.twitter.com/1/users/profile_image/username.json");
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageurl]];
UIImage *tableImage = [[UIImage alloc] initWithData:imageData];
[cell.imageView setImage:tableImage];
CGSize imageSize = CGSizeMake(45,40);
UIGraphicsBeginImageContext(imageSize);
CGRect imageRect = CGRectMake(0.2, 0.1, imageSize.width, imageSize.height);
[tableImage drawInRect:imageRect];
cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
.... Я получаюнет никаких ошибок, только это в дампе "Я должен удалить ГиперСсылки, потому что проблемы со спамом, и я новый участник .... К вашему сведению"
2011-05-29 17:26:02.950 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.980 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.981 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.982 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.983 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.984 ThemeCatcher[2974:207]
http:api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.985 ThemeCatcher[2974:207]
http://api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:02.987 ThemeCatcher[2974:207]
http://api.twitter.com/1/users/profile_image/username.json
2011-05-29 17:26:06.550 ThemeCatcher[2974:207] Request Suceeded: BF0E18DB-A2CC-4823-AC02-
6E182127BBF7
Я могу оставить 2 = P