- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道对于任何精通 Objective-C 的人来说,这可能是一个简单的答案,但我是使用 Objective-C 的新手,过去几天我一直被这个问题困扰。我已经阅读了很多关于重复单元格的 stackoverflow 线程,并尝试复制和粘贴了很多答案,但似乎没有一个对我有用。
我正在尝试将从适用于 iOS 的 Facebook SDK 获取的数据放入 UITableView。我已经设法从 Facebook GraphAPI 获取数据并进入 UITableView,但我无法解决的问题是应用程序从 Facebook 获取的最后一条记录中的数据在所有单元格中不断重复。除此之外,当我向上或向下滚动时,填充单元格需要几秒钟,即使它已经知道数据。
我已经尝试了很多方法来让它工作,但解决这个问题超出了技能水平。在这一点上,我将尽一切努力让它正常工作并显示我从 Facebook 获得的结果而不会导致当前问题,因此非常感谢任何帮助。
我的 NSLogs 显示两条记录,但我的 UITableView 只会显示一条。这是我的日志示例。
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: John Smith
High Score: 5666
Facebook ID: 654321
Image: <UIImage: 0xde12345>
IndexPath Row: 1
*************************************
2013-12-26 11:51:48.380 [7820:70b] CREATING NEW CELL
2013-12-26 11:51:48.380 [7820:70b] indexPath.row: 1
2013-12-26 11:51:48.468 [7820:70b]
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: Figurative Art
High Score: 2762
Facebook ID: 123456
Image: <UIImage: 0x1101234>
IndexPath Row: 1
*************************************
2013-12-26 11:51:48.468 [7820:70b] CREATING NEW CELL
2013-12-26 11:51:48.469 [7820:70b] indexPath.row: 1
2013-12-26 11:51:48.553 [7820:70b]
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: John Smith
High Score: 5666
Facebook ID: 654321
Image: <UIImage: 0xde12345>
IndexPath Row: 0
*************************************
2013-12-26 11:51:48.553 [7820:70b] CREATING NEW CELL
2013-12-26 11:51:48.553 [7820:70b] indexPath.row: 0
2013-12-26 11:51:48.637 [7820:70b]
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: Figurative Art
High Score: 2762
Facebook ID: 123456
Image: <UIImage: 0x1101234>
IndexPath Row: 0
*************************************
2013-12-26 11:51:48.637 [7820:70b] CREATING NEW CELL
2013-12-26 11:51:48.637 [7820:70b] indexPath.row: 0
2013-12-26 11:51:48.720 [7820:70b]
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: John Smith
High Score: 5666
Facebook ID: 654321
Image: <UIImage: 0xde12345>
IndexPath Row: 2
*************************************
2013-12-26 11:51:48.720 [7820:70b] CREATING NEW CELL
2013-12-26 11:51:48.720 [7820:70b] indexPath.row: 2
2013-12-26 11:51:49.290 [7820:70b]
The follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m
Full Name: Figurative Art
High Score: 2762
Facebook ID: 123456
Image: <UIImage: 0x1101234>
IndexPath Row: 2
*************************************
这是我的 LeadeboardViewController.m 中的代码
#import "FBLeaderBoardTableViewController.h"
#import "FBLeaderBoardCell.h"
#import "ViewController.h"
@interface FBLeaderBoardTableViewController ()
@end
@implementation FBLeaderBoardTableViewController
@synthesize facebookID, facebookFullName, facebookFirstName, facebookHighScore, facebookProfilePicture, tableView, closeFacebookLeaderboard;
@synthesize FBArray;
@synthesize FBMutableArray;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"FBLeaderBoardCell" bundle:nil ] forCellReuseIdentifier:@"FBLeaderBoardCellID"];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (IBAction)closeFacebookLeaderboard:(id)sender {
[self dismissViewControllerAnimated:TRUE completion:nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// [self.tableView reloadData];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return 10;
//RESULTS THAT DIDN'T WORK
//return [displayData count];
//return [self.data count];
//return [FBLeaderBoardData count];
//return [facebookHighScore count];
//return [data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"fbcell";
FBLeaderBoardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[FBLeaderBoardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];
{
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"FBLeaderBoardCell" owner:nil options:nil];
for (id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[FBLeaderBoardCell class]]){
cell = (FBLeaderBoardCell *)currentObject;
}
}
} [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"xxxx/scores?fields=score,user"] parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (result && !error)
{
// int index = 0;
for (NSDictionary *dict in [result objectForKey:@"data"])
{
NSString *name = [[dict objectForKey:@"user"] objectForKey:@"name"];
NSString *highScore = [dict objectForKey:@"score"];
NSString *FBID = [[dict objectForKey:@"user"] objectForKey:@"id"];
NSString *imageURL = [[NSString alloc] initWithFormat:@"https://graph.facebook.com/%@/picture",FBID];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
[imageURL release];
self.facebookFullName = name;
self.facebookHighScore = highScore;
self.facebookProfilePicture = image;
NSLog(@"\n\nThe follow data is from the UITableViewCell method in FBLeaderBoardTableViewController.m\nFull Name: %@ \nHigh Score: %@ \nFacebook ID: %@ \nImage: %@\nIndexPath Row: %ld\n\n*************************************\n\n", facebookFullName, facebookHighScore, FBID, facebookProfilePicture, (long)indexPath.row);
// NSLog(@"FBGraph Index Row: %d", indexPath.row);
NSLog(@"CREATING NEW CELL");
NSLog(@"indexPath.row: %d", indexPath.row);
cell.FBPlayerPhoto.image = facebookProfilePicture;
cell.FBPlayerName.text = facebookFullName;
cell.FBPlayerScore.text = [NSString stringWithFormat:@"$%@ Gold Coins",facebookHighScore];
}
}
}];
// [tableView reloadData];
}
return cell;
}
// Removes iOS 7 Staus bar from this view.
- (BOOL)prefersStatusBarHidden{
return YES;
}
@end
这是我的 LeadeboardViewController.h 中的代码
#import <UIKit/UIKit.h>
#import "FBLeaderBoardCell.h"
#import <FacebookSDK/FacebookSDK.h>
@interface FBLeaderBoardTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
NSMutableArray *FBLeaderBoardData;
IBOutlet UILabel *showScore;
__block NSMutableArray* _itemsNamesFriend;
__block NSArray* data;
__block NSMutableArray* displayData;
// IBOutlet FBProfilePictureView *facebookProfilePicture;
IBOutlet UITableView *tableView;
IBOutlet UIButton *closeFacebookLeaderboard;
}
@property (strong, nonatomic) NSArray *data;
@property (strong) NSString *facebookID;
@property (strong) NSString *facebookFullName;
@property (strong) NSString *facebookFirstName;
@property (strong) NSString *facebookHighScore;
@property (strong) UIImage *facebookProfilePicture;
//@property (strong) IBOutlet FBProfilePictureView *facebookProfilePicture;
@property (strong) IBOutlet UITableView *tableView;
@property (strong) IBOutlet UIButton *closeFacebookLeaderboard;
@property (strong, nonatomic) NSArray *FBArray;
@property (strong, nonatomic) NSMutableArray *FBMutableArray;
@end
我知道我目前在我的 - (UITableViewCell *) 中使用 FBRequest 的方式可能不是调用数据的最佳方式,但是当我尝试将其放入 viewDidLoad 方法时,我在 - (UITableViewCell *) 中得到 NULL *).弄清楚如何将它作为 NSArray 或 NSMutableArray 一直给我带来问题,所以我只是将所有内容放入 - (UITableViewCell *)。
最佳答案
您的代码如此重复的原因是因为您的 cellForRowAtIndexPath 方法中有这个 for 循环:
for (NSDictionary *dict in [result objectForKey:@"data"]) {
NSString *name = [[dict objectForKey:@"user"] objectForKey:@"name"];
NSString *highScore = [dict objectForKey:@"score"];
NSString *FBID = [[dict objectForKey:@"user"] objectForKey:@"id"];
NSString *imageURL = [[NSString alloc] initWithFormat:@"https://graph.facebook.com/%@/picture",FBID];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
[imageURL release];
self.facebookFullName = name;
self.facebookHighScore = highScore;
self.facebookProfilePicture = image;
cell.FBPlayerPhoto.image = facebookProfilePicture;
cell.FBPlayerName.text = facebookFullName;
cell.FBPlayerScore.text = [NSString stringWithFormat:@"$%@ Gold Coins",facebookHighScore];
}
您在加载每一行的同时浏览字典,因此您最终要使用最终迭代期间生成的结果来设置您的单元格。
所以用与当前特定行相关的单个字典值替换循环。例如,您可以设置 dict = [[result objectForKey:@"data"] objectAtIndex:indexPath.row]
并删除 for 循环,如下所示:
NSDictionary *dict = [[result objectForKey:@"data"] objectAtIndex:indexPath.row];
NSString *name = [[dict objectForKey:@"user"] objectForKey:@"name"];
NSString *highScore = [dict objectForKey:@"score"];
NSString *FBID = [[dict objectForKey:@"user"] objectForKey:@"id"];
NSString *imageURL = [[NSString alloc] initWithFormat:@"https://graph.facebook.com/%@/picture",FBID];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
[imageURL release];
self.facebookFullName = name;
self.facebookHighScore = highScore;
self.facebookProfilePicture = image;
cell.FBPlayerPhoto.image = facebookProfilePicture;
cell.FBPlayerName.text = facebookFullName;
cell.FBPlayerScore.text = [NSString stringWithFormat:@"$%@ Gold Coins",facebookHighScore];
编辑:还有一些其他的事情,我们正在做……
(1) 你在这里犯了类似的错误:
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"FBLeaderBoardCell" owner:nil options:nil];
for (id currentObject in topLevelObjects){
if([currentObject isKindOfClass:[FBLeaderBoardCell class]]){
cell = (FBLeaderBoardCell *)currentObject;
}
}
通过在循环的每次迭代期间重新填充单元格对象。那是不必要的。按照此处提到的方法使用 xib 正确加载自定义单元格:https://stackoverflow.com/a/1939305/2274694
(2) 您实际上可能想在代码中使用不同的方法获取图形路径结果,原因有两个:#1 让您的应用程序在加载每一行时调用 Facebook 图形路径没有意义。更重要的是,在您的情况下,#2 为了在 numberOfRowsInSection:
期间动态找出行数,您无论如何都需要预取结果。
所以我建议在每次加载表之前获取图形路径结果,在 block 中插入一个[tableView reloadData]
语句,将结果保存为类变量,并设置行数结果。计数。
关于ios - 如何让我的 Facebook GraphAPI 数据在 UITableView 中不重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790989/
我正在使用 PHP 和 FacebookAPI,除了一个奇怪的错误之外,一切都几乎没问题。 我试图在 Facebook 开发者网站和谷歌上找到解决方案,但没有成功。 这是场景: 事件 36844153
所以我很难找到记录的位置(如果有的话),但是当我从 FB GraphAPI 请求数据时收到以下错误消息。 "Please reduce the amount of data you're asking
我尝试让 Azure Graph API 调用 getMemberGroups,但收到“400 Bad Request”错误响应。 根据文档[ https://msdn.microsoft.com/e
我尝试让 Azure Graph API 调用 getMemberGroups,但收到“400 Bad Request”错误响应。 根据文档[ https://msdn.microsoft.com/e
我已经集成了 facebook graph api 是几个应用程序,但最近我遇到了一个问题,而我的 Facebook 个人资料 安全浏览 启用> -> Privacy Settings -> Secu
我需要允许用户从 iOS 应用程序在 Facebook 上发布信息,以下几乎是我想要的,但是: 我显然不想要 ISBN,因为应用程序中的信息(实际上是另一个用户的帖子)不是可以描述为“书”并且没有 I
所以我目前正在构建一个单页应用程序,因此需要在加载所有数据后更新元数据。 (该应用程序严格由 javascript 和 html 组成,几乎没有后端试图变得轻量级......整个应用程序约为 50kb
我想使用 GraphAPI 从 Facebook 群组中检索照片。基于FB Docs我看不到与照片的任何联系。我想获取照片和上传照片的用户。 最佳答案 图形 API: http://graph.fac
我正在尝试使用 JavaScript Facebook SDK 从特定用户获取墙上的帖子。当我使用 graph API Explorer 时,它工作正常;但是当我在我的网站上尝试同样的事情时,我收到以
安装facebook-sdk模块后here ,并查看此处和其他地方的其他解决方案,我不断收到此错误: Traceback (most recent call last): File "facebo
我知道对于任何精通 Objective-C 的人来说,这可能是一个简单的答案,但我是使用 Objective-C 的新手,过去几天我一直被这个问题困扰。我已经阅读了很多关于重复单元格的 stackov
我正在尝试使用 Facebook SDK for Python 运行一个基本示例。我试着做这个 tutorial从命令行执行(使用“pip install facebook”和“pip install
当我尝试在 Outlook 中为用户生成访问 token ,然后为图形 Api 交换访问 token 时,它失败并出现格式错误的错误。 为了生成访问 token ,我传递了这些值 完整错误是:
我的应用程序有一个功能:从 Facebook 页面获取帖子并将其显示在应用程序中。我搜索了一下,发现我应该使用 Facebook GraphAPI: https://developers.facebo
如何使用 Python 和 GraphAPI 更新 FB 状态?以前有人问过这个问题,但许多解决方案已被弃用,而且 GraphAPI 的要求似乎使许多解决方案变得无关紧要。 我摆弄过 fbpy、Fac
使用 FQL,可以直接了解用户的社交参与度。例如, 用户发表的帖子数 点赞数 照片上传数量 照片标签的数量 等等… 由于 FB 想放弃 FQL,没有直接的方法可以使用新的图形 API 端点获取统计信息
我必须更改代码才能获得有效 token ,以便我可以使用 Graph API 访问 AAD 用户的详细个人资料信息 然而,令我沮丧的是,我最终意识到该 token 不允许访问我的 API,该 API
我在 Python 2.7(使用 Anaconda 发行版)中有以下简单示例,用于使用 Facebook Graph API 访问数据: import facebook token =
有人问过这个问题,但从未回答过。 import facebook graph = facebook.GraphAPI(access_token="your token",version="2.7")
我正在尝试使用 Node.js 技术更新我的 Azure 帐户上的用户。我正在使用 azure-graphapi 模块发送请求并初始化。以下是我的代码。 var GraphAPI = require(
我是一名优秀的程序员,十分优秀!