小编Mag*_*ave的帖子

UITableView在滚动时崩溃

我有一个构建和绘制确定的TableView,但随后在滚动视图时崩溃.我已经浏览了调试器,似乎我的类级变量被某种方式覆盖,因此当再次调用titleForHeaderInSection时它们不再存在.非常奇怪的是,如果我替换代码:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *sectionTitle = [favouritesDataSections objectAtIndex:section];
return sectionTitle;
}
Run Code Online (Sandbox Code Playgroud)

有:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *sectionTitle = @"Test";
return sectionTitle;
}
Run Code Online (Sandbox Code Playgroud)

它仍然崩溃,但这次当你将鼠标悬停在sectionTitle变量上时,调试器不会列出NSString.

这是我用来创建视图和设置类级变量的代码:

- (void)loadView {
[super loadView];
CGRect tableSize = CGRectMake(0,0,320,460);
UITableView *favouritesTableView = [[UITableView alloc] initWithFrame:tableSize style:UITableViewStylePlain];
favouritesTableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
favouritesTableView.dataSource = self;
favouritesTableView.delegate = self;
favouritesTableView.rowHeight = 52;
[self.view addSubview:favouritesTableView];
}

- (void)viewDidLoad {
[super viewDidLoad];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
// Get the full …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uitableview

5
推荐指数
1
解决办法
4822
查看次数

具有自定义 getter 的原子属性

我有一个属性声明为的类:

@property (nonatomic, strong) NSMutableArray *links;
Run Code Online (Sandbox Code Playgroud)

我想懒惰地实例化它,所以有以下自定义 getter:

- (NSMutableArray *)links {

    if (!_links) {
        _links = [NSMutableArray array];
    }

    return _links;
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序取得了一些进展,现在可以从不同的线程访问该对象。我将声明更改为:

@property (atomic, strong) NSMutableArray *links;
Run Code Online (Sandbox Code Playgroud)

这会生成一个编译器警告:可写原子属性不能将合成的 setter 与用户定义的 getter 结合起来。

我明白 - 我想。 我的问题是,为了使用自定义 getter 创建原子属性,执行以下操作是正确的吗?

  • 创建我自己的实例变量 _links
  • 包裹我的吸气剂 @synchronized
  • 创建一个用户定义的 setter,也包含在 @synchronized

编辑:这是我的新自定义 setter 和 getter 的代码:

- (NSMutableArray *)links {

   if (!_links) {
       @synchronized(self) {
           if (!_links) {
               _links = [NSMutableArray array];
           }
       }
   }

   return _links;    
}

- (void)links:(NSMutableArray …
Run Code Online (Sandbox Code Playgroud)

cocoa multithreading atomic objective-c lazy-initialization

4
推荐指数
1
解决办法
1622
查看次数

带有MSAL的Xamarin无法保存访问令牌,因为在临时设置期间更改了钥匙串访问组

我们已将最新的MSAL库添加到我们的Xamarin项目中,并将钥匙串共享功能添加到了权利plist中:

在此处输入图片说明

该应用程序可以在开发人员计算机上正常构建,并且可以针对Azure AD B2C正确进行身份验证。

当我们通过ADO构建并在App Center中发布(临时配置)时,该应用将构建,并且似乎针对Azure AD B2C进行身份验证,但不与我们的其他Azure资源(API,存储等)进行通信。确认没有找到钥匙串访问组,并且在正常进行身份验证时,MSAL无法将访问令牌保存在钥匙串中。

iOSTokenCacheAccessor.Save (System.String account, System.String service, System.String generic, System.Int32 type, System.String value)
Run Code Online (Sandbox Code Playgroud)

Microsoft.Identity.Client.MsalClientException: The application does not have keychain access groups enabled in the Entitlements.plist. As a result, there was a failure to save to the iOS keychain

我们认为这是因为在Ad-Hoc设置过程中,设备ID已包含在设置配置文件中之后,应用才被重新签名,但是Ad-Hoc配置文件权利部分仅包含[app ID]。*而不是com.microsoft。 adalcache值。

  1. 在构建到配置文件期间,entitlements.plist是否会合并,即将钥匙串组添加到plist的entitlements部分?
  2. 如果是这样,这是什么?什么时候在构建管道中发生?
  3. 在这种情况下,临时配置如何工作?

非常感谢您的帮助,因为这目前阻止了我们的发布。

keychain ios azure-active-directory adal azure-ad-msal

4
推荐指数
1
解决办法
659
查看次数

找不到编译器警告的方法

我从字符串创建一个类,检查它是否有效,然后检查它是否响应特定方法.如果是,那么我调用该方法.这一切都很好,除了我得到一个恼人的编译器警告:"警告:没有'-setCurrentID:'方法找到".我在这里做错了吗?反正有没有告诉编译器一切正常并停止报告警告?

这是代码:

// Create an instance of the class
id viewController = [[NSClassFromString(class) alloc] init];

// Check the class supports the methods to set the row and section
if ([viewController respondsToSelector:@selector(setCurrentID:)]) 
    {
        [viewController setCurrentID:itemID];
    }   

// Push the view controller onto the tab bar stack      
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
Run Code Online (Sandbox Code Playgroud)

干杯

戴夫

iphone xcode objective-c compiler-warnings

3
推荐指数
1
解决办法
2239
查看次数

在iPhone上进行2D碰撞检测的最佳方法是什么?

一直在研究这个碰撞检测问题,我可以采取三种主要方法:

  1. 精灵和面具的方法.(和精灵的重叠并检查所得到的精灵像素数据中的非零数字).

  2. 边界圆,矩形或多边形.(创建一个或多个包围精灵的形状,并执行基本数学检查重叠).

  3. 使用现有的精灵库.

第一种方法,即使它是我过去在16x16精灵块中完成它的方式,似乎没有一种简单的方法来获得单个图像像素数据和/或alpha通道在Quartz中(或OPENGL).检测边界框的重叠很容易,但是然后从重叠创建第三个图像然后测试像素是很复杂的,我的直觉是,即使我们能够使它工作也会很慢.我错过了一些整洁的东西吗?

第二种方法是将我们的精灵分成几个多边形并测试它们的重叠.多边形越多,碰撞检测越准确.好处是它速度快,而且准确.缺点是它使精灵创建更复杂.也就是说,我们必须为每个精灵创建多边形.对于速度,最好的方法是创建一个多边形树.

第三种方法我不确定,因为它涉及购买代码(或使用开源许可证).我不确定最好使用的库是什么,或者这是否会让生活更轻松,或者让我们在将它集成到我们的应用程序时遇到问题.

所以简而言之,我赞成多边形和树形方法,并且在我去编写大量代码之前,我将非常感谢您对此的看法.

最好的祝福

戴夫

iphone 2d collision-detection quartz-graphics

2
推荐指数
1
解决办法
1532
查看次数

连接由CRLF分隔的两个NSStrings

抱歉这个愚蠢的问题.我有两个NSStrings,我想创建第三个,第一个字符串加上一个新行加上第二个字​​符串.我知道这一定很容易,但我正在寻找它.

最终,我希望生成的字符串在表格视图单元格中正确显示.

问候

戴夫

cocoa objective-c nsstring

0
推荐指数
1
解决办法
2646
查看次数

decodeObjectForKey:始终返回nil

我试图将我的对象图保存到一个文件,然后在以后重新加载它,但是decodeObjectForKey:对于我指定的任何键,总是返回nil.

创建了一个二进制文件,其中偶尔会有人类可读的文本,即titleTextColor,所以我认为归档过程正在运行.

我是否想念NSKeyedArchiver和NSKeyedUnarchiver是如何工作的?任何帮助,将不胜感激.

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeFloat:titleFontSize forKey:@"titleFontSize"];
    [encoder encodeObject:[UIColor orangeColor] forKey:@"titleTextColor"];
    [encoder encodeObject:lineSeparatorColor forKey:@"lineSeparatorColor"];
    [encoder encodeObject:bodyTextColor forKey:@"bodyTextColor"];
    [encoder encodeFloat:bodyTextFontSize forKey:@"bodyTextFontSize"];
    [encoder encodeObject:backgroundColor forKey:@"backgroundColor"];
    [encoder encodeObject:tintColor forKey:@"tintColor"];
    [encoder encodeInteger:bodyTextAlignment forKey:@"bodyTextAlignment"];

    [encoder encodeObject:@"Text" forKey:@"Text"];
}

+ (void) saveToFile {
    // Get the shared instance
    PSYDefaults *sharedInstance = [PSYDefaults sharedInstance];    

    // Serialise the object
    NSData *serializedObject = [NSKeyedArchiver archivedDataWithRootObject:sharedInstance];

    // Get the path and filename of the file
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString …
Run Code Online (Sandbox Code Playgroud)

iphone nscoding nskeyedarchiver ios

0
推荐指数
1
解决办法
5477
查看次数

查找字符串的出现并有效地插入新字符串

我需要能够解析包含XML的字符串并通过修改标记来"修复"它.举例来说,我需要替换所有出现的fontSize="16"fontSize="16px".

在c#和.NET中执行此操作的有效(但可读)方式是什么?我已经开始IndexOf在一个while循环中使用的路线,但认为必须有一个更好的方法来做到这一点.

.net c# string

0
推荐指数
1
解决办法
73
查看次数